{"id":2,"date":"2026-09-28T10:14:09","date_gmt":"2026-09-28T10:14:09","guid":{"rendered":"https:\/\/recepten.crossfitmuiden.nl\/?page_id=2"},"modified":"2026-09-28T10:18:42","modified_gmt":"2026-09-28T10:18:42","slug":"sample-page","status":"publish","type":"page","link":"https:\/\/recepten.crossfitmuiden.nl\/","title":{"rendered":""},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"nl\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\">\n<title>Zone Keuken \u2014 recepten &amp; blokkenrekenaar<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700;800;900&#038;display=swap\" rel=\"stylesheet\">\n<style>\n:root{\n  --paper:#F3F1EF;\n  --paper-2:#FFFFFF;\n  --ink:#161515;\n  --ink-soft:#5A5654;\n  --line:#DCD8D5;\n  --brand:#8C2331;\n  --brand-dark:#6E1B26;\n  --e:#8C2331;\n  --e-bg:#F3DDE0;\n  --k:#5B6B75;\n  --k-bg:#E7EBEC;\n  --v:#3A3230;\n  --v-bg:#E5E2E0;\n  --radius:2px;\n}\n@media (prefers-color-scheme: dark){\n  :root:not([data-theme=\"light\"]){\n    --paper:#1B1A1A;\n    --paper-2:#242222;\n    --ink:#F2F0ED;\n    --ink-soft:#B7B2AE;\n    --line:#3A3735;\n    --brand:#C63B49;\n    --brand-dark:#E2626E;\n    --e:#DD5F6C;\n    --e-bg:#3A1E22;\n    --k:#B8C5CC;\n    --k-bg:#2A3033;\n    --v:#D6D2CD;\n    --v-bg:#2E2B29;\n  }\n}\n:root[data-theme=\"dark\"]{\n  --paper:#1B1A1A;--paper-2:#242222;--ink:#F2F0ED;--ink-soft:#B7B2AE;--line:#3A3735;\n  --brand:#C63B49;--brand-dark:#E2626E;--e:#DD5F6C;--e-bg:#3A1E22;--k:#B8C5CC;--k-bg:#2A3033;\n  --v:#D6D2CD;--v-bg:#2E2B29;\n}\n*{box-sizing:border-box;}\nhtml{scroll-padding-top:calc(72px + env(safe-area-inset-top,0px));}\nbody{\n  margin:0;\n  background:var(--paper);\n  color:var(--ink);\n  font-family:'Montserrat',system-ui,sans-serif;\n  padding-top:env(safe-area-inset-top,0px);\n  padding-bottom:env(safe-area-inset-bottom,0px);\n  min-height:100%;\n}\nh1,h2,h3,.display{\n  font-family:'Montserrat',system-ui,sans-serif;\n  font-weight:800;\n  letter-spacing:-0.01em;\n  color:var(--ink);\n  margin:0;\n}\na{color:var(--brand-dark);}\n\n\/* header *\/\nheader.top{\n  position:sticky;top:0;z-index:20;\n  padding-top:env(safe-area-inset-top,0px);\n  background:var(--paper);\n  border-bottom:1px solid var(--line);\n}\n.top-inner{\n  max-width:1120px;margin:0 auto;padding:16px 20px;\n  display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;\n}\n.logo{\n  font-family:'Montserrat',sans-serif;font-weight:800;font-size:1.4rem;\n  display:flex;align-items:baseline;gap:.5em;text-transform:uppercase;letter-spacing:.01em;\n}\n.logo .zone{color:var(--ink);}\n.logo .keuken{color:var(--brand);}\n.logo small{\n  font-family:'Montserrat',sans-serif;font-weight:600;font-size:.6rem;\n  color:var(--ink-soft);letter-spacing:.08em;text-transform:uppercase;\n}\nnav.tags{display:flex;gap:8px;flex-wrap:wrap;}\n.chip-btn{\n  font-family:'Montserrat',sans-serif;font-size:.82rem;font-weight:500;\n  border:1px solid var(--line);background:var(--paper-2);color:var(--ink-soft);\n  padding:6px 12px;border-radius:999px;cursor:pointer;transition:.15s;\n}\n.chip-btn:hover{border-color:var(--brand);}\n.chip-btn.active{background:var(--brand);border-color:var(--brand);color:#fff;}\n\n.searchwrap{max-width:1120px;margin:0 auto;padding:14px 20px 0;}\n#search{\n  width:100%;font-family:'Montserrat',sans-serif;font-size:1rem;\n  padding:11px 14px;border:1px solid var(--line);border-radius:2px;\n  background:var(--paper-2);color:var(--ink);\n}\n#search:focus{outline:2px solid var(--brand);outline-offset:1px;}\n\nmain{max-width:1120px;margin:0 auto;padding:22px 20px 80px;}\n\n\/* recipe grid *\/\n#count{font-size:.85rem;color:var(--ink-soft);margin:0 0 14px;}\n.grid{\n  display:grid;gap:14px;\n  grid-template-columns:repeat(auto-fill,minmax(230px,1fr));\n}\n.card{\n  text-align:left;background:var(--paper-2);border:1px solid var(--line);\n  padding:16px;cursor:pointer;display:flex;flex-direction:column;gap:8px;\n  font-family:inherit;color:inherit;\n}\n.card:hover{border-color:var(--brand);}\n.card:focus-visible{outline:2px solid var(--brand);outline-offset:2px;}\n.card h3{font-size:1.12rem;line-height:1.25;}\n.card p{margin:0;font-size:.86rem;color:var(--ink-soft);line-height:1.4;flex:1;}\n.meta-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}\n.blocks-badge{\n  font-family:'Montserrat',sans-serif;font-weight:700;font-size:1.05rem;\n  color:var(--brand-dark);border:1.5px solid var(--brand);\n  width:34px;height:34px;border-radius:50%;\n  display:flex;align-items:center;justify-content:center;flex-shrink:0;\n}\n.tag{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:999px;}\n.tag.fav{background:var(--brand);color:#fff;}\n.tag.gf{background:transparent;border:1px solid var(--line);color:var(--ink-soft);}\n.empty{padding:40px 0;color:var(--ink-soft);text-align:center;}\n\n\/* detail view *\/\n#detail{display:none;}\n#detail.open{display:block;}\n#browse.hidden{display:none;}\n.back{\n  background:none;border:none;font-family:'Montserrat',sans-serif;font-size:.9rem;\n  color:var(--ink-soft);cursor:pointer;padding:0 0 18px;display:flex;align-items:center;gap:6px;\n}\n.back:hover{color:var(--brand-dark);}\n.detail-head{border-bottom:1px solid var(--line);padding-bottom:22px;margin-bottom:26px;}\n.detail-head h2{font-size:2rem;margin-bottom:10px;}\n.detail-head .desc{color:var(--ink-soft);max-width:60ch;line-height:1.55;margin-bottom:14px;}\n.detail-meta{display:flex;gap:10px;flex-wrap:wrap;align-items:center;}\n.meta-pill{\n  font-size:.78rem;font-weight:600;padding:4px 10px;border:1px solid var(--line);border-radius:999px;color:var(--ink-soft);\n}\n.meta-pill.fav{border-color:var(--brand);color:var(--brand-dark);}\n\n.layout{display:grid;grid-template-columns:1.1fr 1.4fr;gap:40px;align-items:start;}\n@media(max-width:760px){.layout{grid-template-columns:1fr;}}\n\n\/* calculator *\/\n.calc{\n  background:var(--paper-2);border:1px solid var(--line);padding:20px;position:sticky;top:88px;\n}\n.calc h3{font-size:1rem;margin-bottom:4px;}\n.calc .sub{font-size:.8rem;color:var(--ink-soft);margin-bottom:14px;}\n.calc-input-row{display:flex;align-items:center;gap:8px;margin-bottom:16px;}\n.stepper{\n  display:flex;border:1px solid var(--line);flex:1;\n}\n.stepper button{\n  width:40px;background:var(--paper);border:none;font-size:1.2rem;color:var(--brand-dark);cursor:pointer;\n}\n.stepper button:hover{background:var(--brand);color:#fff;}\n#blockInput{\n  flex:1;border:none;text-align:center;font-family:'Montserrat',sans-serif;font-weight:600;font-size:1.3rem;\n  background:var(--paper);color:var(--ink);width:100%;padding:6px 0;\n}\n.reset-link{background:none;border:none;font-size:.78rem;color:var(--ink-soft);text-decoration:underline;cursor:pointer;padding:0;}\n.evbdown{display:flex;gap:8px;margin-top:16px;}\n.evb{flex:1;text-align:center;padding:8px 4px;border-radius:2px;font-size:.8rem;}\n.evb b{display:block;font-family:'Montserrat',sans-serif;font-size:1.15rem;}\n.evb.e{background:var(--e-bg);color:var(--e);}\n.evb.k{background:var(--k-bg);color:var(--k);}\n.evb.v{background:var(--v-bg);color:var(--v);}\n\n\/* ingredients *\/\nh3.section-title{font-size:1.05rem;margin-bottom:12px;margin-top:0;}\nul.ing-list{list-style:none;margin:0 0 30px;padding:0;}\nul.ing-list li{\n  display:flex;align-items:baseline;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);\n}\n.blk{\n  font-size:.68rem;font-weight:700;min-width:34px;text-align:center;padding:2px 4px;border-radius:2px;flex-shrink:0;\n}\n.blk.e{background:var(--e-bg);color:var(--e);}\n.blk.k{background:var(--k-bg);color:var(--k);}\n.blk.v{background:var(--v-bg);color:var(--v);}\n.blk.none{background:transparent;color:var(--ink-soft);}\n.ing-amt{font-weight:600;min-width:70px;flex-shrink:0;font-variant-numeric:tabular-nums;}\n.ing-name{color:var(--ink-soft);}\n\nol.steps{margin:0 0 26px;padding:0;list-style:none;counter-reset:step;}\nol.steps li{\n  counter-increment:step;padding:10px 0 10px 38px;position:relative;line-height:1.55;border-bottom:1px solid var(--line);\n}\nol.steps li::before{\n  content:counter(step);position:absolute;left:0;top:9px;\n  font-family:'Montserrat',sans-serif;font-weight:700;color:var(--brand-dark);font-size:1rem;\n}\n.tips{background:var(--paper-2);border-left:3px solid var(--brand);padding:14px 18px;margin-top:8px;}\n.tips h4{font-size:.85rem;margin:0 0 8px;color:var(--brand-dark);font-family:'Montserrat',sans-serif;font-weight:700;letter-spacing:.02em;}\n.tips ul{margin:0;padding-left:18px;}\n.tips li{margin-bottom:6px;line-height:1.5;font-size:.9rem;color:var(--ink-soft);}\n.legend{font-size:.76rem;color:var(--ink-soft);margin:0 0 20px;display:flex;gap:14px;flex-wrap:wrap;}\n.legend span{display:inline-flex;align-items:center;gap:5px;}\n.legend i{width:10px;height:10px;border-radius:2px;display:inline-block;}\nfooter{text-align:center;color:var(--ink-soft);font-size:.8rem;padding:26px 20px 40px;}\n\n\/* add recipe form *\/\n#addForm{display:none;max-width:760px;}\n#addForm.open{display:block;}\n.f-group{margin-bottom:18px;}\n.f-group label{display:block;font-size:.82rem;font-weight:600;margin-bottom:6px;color:var(--ink-soft);}\n.f-group input[type=text],.f-group input[type=number],.f-group textarea,.f-group select{\n  width:100%;font-family:'Montserrat',sans-serif;font-size:.95rem;padding:9px 11px;\n  border:1px solid var(--line);border-radius:2px;background:var(--paper-2);color:var(--ink);\n}\n.f-group textarea{resize:vertical;min-height:70px;line-height:1.5;}\n.f-row{display:flex;gap:14px;}\n.f-row>.f-group{flex:1;}\n.f-check{display:flex;align-items:center;gap:8px;font-size:.9rem;color:var(--ink);}\n.f-check input{width:auto;}\n.ing-row{display:grid;grid-template-columns:90px 70px 1fr 90px 34px;gap:8px;margin-bottom:8px;align-items:center;}\n.ing-row input,.ing-row select{padding:7px 8px;font-size:.88rem;}\n.rm-row{background:none;border:1px solid var(--line);color:var(--ink-soft);cursor:pointer;border-radius:2px;height:34px;}\n.rm-row:hover{border-color:#B5432F;color:#B5432F;}\n.add-row-btn{\n  background:none;border:1px dashed var(--line);color:var(--ink-soft);padding:8px 14px;\n  cursor:pointer;font-size:.85rem;margin-top:2px;border-radius:2px;\n}\n.add-row-btn:hover{border-color:var(--brand);color:var(--brand-dark);}\n.submit-row{display:flex;gap:12px;margin-top:26px;align-items:center;}\n.btn-primary{\n  background:var(--brand);color:#fff;border:none;padding:11px 22px;font-weight:600;\n  font-family:'Montserrat',sans-serif;font-size:.95rem;cursor:pointer;border-radius:2px;\n}\n.btn-primary:hover{background:var(--brand-dark);}\n.form-note{font-size:.8rem;color:var(--ink-soft);margin-top:6px;}\n.custom-badge{background:var(--v);color:#fff;font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:999px;}\n.del-recipe{background:none;border:1px solid var(--line);color:#B5432F;padding:6px 12px;font-size:.82rem;cursor:pointer;border-radius:2px;}\n.del-recipe:hover{background:#B5432F;color:#fff;border-color:#B5432F;}\n<\/style>\n<\/head>\n<body>\n\n<header class=\"top\">\n  <div class=\"top-inner\">\n    <div class=\"logo\"><span class=\"zone\">Zone<\/span><span class=\"keuken\">Keuken<\/span> <small>28 RECEPTEN \u00b7 BLOKKENREKENAAR<\/small><\/div>\n    <nav class=\"tags\" id=\"filterTags\">\n      <button class=\"chip-btn active\" data-filter=\"all\">Alles<\/button>\n      <button class=\"chip-btn\" data-filter=\"fav\">Favorable<\/button>\n      <button class=\"chip-btn\" data-filter=\"gf\">Glutenvrij<\/button>\n      <button class=\"chip-btn\" data-filter=\"ontbijt\">Zoet \/ gebak<\/button>\n      <button class=\"chip-btn\" data-filter=\"hoofd\">Hoofdgerecht<\/button>\n    <\/nav>\n    <button class=\"chip-btn\" id=\"addRecipeBtn\" style=\"border-color:var(--brand);color:var(--brand-dark);font-weight:700;\">+ Recept toevoegen<\/button>\n  <\/div>\n  <div class=\"searchwrap\">\n    <input id=\"search\" type=\"search\" placeholder=\"Zoek op recept of ingredi\u00ebnt\u2026\">\n  <\/div>\n<\/header>\n\n<main>\n  <section id=\"browse\">\n    <p id=\"count\"><\/p>\n    <div class=\"grid\" id=\"grid\"><\/div>\n    <p class=\"empty\" id=\"emptyMsg\" style=\"display:none;\">Niets gevonden. Probeer een andere zoekterm.<\/p>\n  <\/section>\n\n  <section id=\"detail\"><\/section>\n\n  <section id=\"addForm\">\n    <button class=\"back\" id=\"cancelAddBtn\">\u2190 Terug naar alle recepten<\/button>\n    <h2 style=\"font-size:1.6rem;margin-bottom:18px;\">Eigen recept toevoegen<\/h2>\n    <p class=\"form-note\" style=\"margin-bottom:22px;\">Dit recept wordt alleen in d\u00e9ze browser opgeslagen (localStorage) \u2014 niet gedeeld met anderen en niet zichtbaar op een ander apparaat. Wis je browsergegevens, dan is het weg.<\/p>\n\n    <div class=\"f-group\">\n      <label for=\"f-title\">Titel<\/label>\n      <input type=\"text\" id=\"f-title\" placeholder=\"Bijv. Courgette ovenschotel met feta\">\n    <\/div>\n    <div class=\"f-group\">\n      <label for=\"f-desc\">Korte beschrijving<\/label>\n      <textarea id=\"f-desc\" style=\"min-height:50px;\" placeholder=\"E\u00e9n of twee zinnen over het recept\"><\/textarea>\n    <\/div>\n    <div class=\"f-row\">\n      <div class=\"f-group\">\n        <label for=\"f-blocks\">Aantal blokken (totaal)<\/label>\n        <input type=\"number\" id=\"f-blocks\" min=\"0.5\" step=\"0.5\" value=\"4\">\n      <\/div>\n      <div class=\"f-group\">\n        <label for=\"f-cat\">Categorie<\/label>\n        <select id=\"f-cat\">\n          <option value=\"hoofd\">Hoofdgerecht<\/option>\n          <option value=\"ontbijt\">Ontbijt \/ zoet<\/option>\n          <option value=\"salade\">Salade<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"f-group\">\n        <label for=\"f-oven\">Oven (optioneel)<\/label>\n        <input type=\"text\" id=\"f-oven\" placeholder=\"180\u00b0 | 30 min\">\n      <\/div>\n    <\/div>\n    <div class=\"f-row\" style=\"margin-bottom:18px;\">\n      <label class=\"f-check\"><input type=\"checkbox\" id=\"f-fav\"> Favorable<\/label>\n      <label class=\"f-check\"><input type=\"checkbox\" id=\"f-gf\" checked> Glutenvrij<\/label>\n    <\/div>\n\n    <h3 class=\"section-title\">Ingredi\u00ebnten<\/h3>\n    <div id=\"ingRows\"><\/div>\n    <button type=\"button\" class=\"add-row-btn\" id=\"addIngRow\">+ Ingredi\u00ebnt toevoegen<\/button>\n\n    <div class=\"f-group\" style=\"margin-top:24px;\">\n      <label for=\"f-steps\">Bereiding \u2014 \u00e9\u00e9n stap per regel<\/label>\n      <textarea id=\"f-steps\" style=\"min-height:130px;\" placeholder=\"Snij de ui fijn.&#10;Bak de ui glazig in olijfolie.&#10;...\"><\/textarea>\n    <\/div>\n    <div class=\"f-group\">\n      <label for=\"f-tips\">Tips \u2014 \u00e9\u00e9n tip per regel (optioneel)<\/label>\n      <textarea id=\"f-tips\" style=\"min-height:70px;\"><\/textarea>\n    <\/div>\n\n    <div class=\"submit-row\">\n      <button type=\"button\" class=\"btn-primary\" id=\"saveRecipeBtn\">Recept opslaan<\/button>\n      <span class=\"form-note\" id=\"formMsg\"><\/span>\n    <\/div>\n  <\/section>\n<\/main>\n\n<footer>Zelf gemaakt uit de Zone Food Recipes-verzameling \u00b7 blokken volgens de Zone-methode van dr. Barry Sears<\/footer>\n\n<script>\nconst R = [\n{id:'appel-peer-crumble',t:'Appel\/peer crumble met kwark',d:'Een lekker ontbijtje voor een zondag met vanille kwark. Bevat appel, peer en blauwe bessen \u2014 maak er gerust je eigen fruitcombinatie van.',bl:3,fav:true,gf:true,cat:'ontbijt',oven:'180\u00b0 | 30 min',\ning:[{a:1,u:'st',n:'ei',b:'E'},{a:126,u:'g',n:'vanille kwark',b:'E'},{a:40,u:'g',n:'appel',b:'K'},{a:38,u:'g',n:'peer',b:'K'},{a:38,u:'g',n:'blauwe bessen',b:'K'},{a:23,u:'g',n:'havermout',b:'K'},{a:9,u:'g',n:'amandelmeel',b:'V'}],\nsteps:['Snij de appel en peer in kleine stukjes.','Meng het met de blauwe bessen en kaneel.','Mix het ei, de havermout, de amandelmeel met een snufje zout, kaneel en koekkruiden.','Schep driekwart van het ei mengsel door de fruitmix heen.','Schep de fruitmix in een kleine cakevorm (11 cm).','Schep de rest van het ei mengsel eroverheen.','Bak 30 minuten in de oven op 180 graden.','Eet het met de vanille kwark.'],\ntips:['De baktijd is gebaseerd op een heteluchtoven \u2014 experimenteer met de jouwe.','Koud vind ik hem lekkerder dan warm; \\'s avonds bakken, \\'s ochtends een snel ontbijtje.','Wil je het zoeter? Voeg wat stevia druppels toe.','Je kunt elke fruitmix gebruiken, ook bijvoorbeeld alleen appels.']},\n\n{id:'asperges-zalm-friet',t:'Asperges met zalm en zoete aardappel friet',d:'Het is asperge seizoen! Een koolhydraten blok bevat 500 gram, wat een perfecte groente maakt voor een kleine maaltijd.',bl:2,fav:false,gf:true,cat:'hoofd',oven:null,\ning:[{a:68,u:'g',n:'(gerookte) zalm',b:'E'},{a:250,u:'g',n:'witte asperges',b:'K'},{a:106,u:'g',n:'zoete aardappel',b:'K'},{a:30,u:'g',n:'zure room',b:'V'}],\nsteps:['Schil de asperges: verwijder de buitenste schil en snij een stukje van de onderkant.','Kook ze in kokend water met zout in 15-25 minuten gaar.','Snij de zoete aardappel in partjes.','Voeg olijfolie (extra blok vet), zout, peper en ruim paprikapoeder toe.','Gril de zoete aardappel in de oven (200\u00b0, 25 min) of airfryer (\u00b115 min).','Meng zure room met citroensap, paprikapoeder, zout, peper en bieslook; voeg kookvocht toe om de saus vloeibaarder te maken.','Leg zoete aardappel en asperges op een bord, schenk de saus erover en leg de zalm erop.'],\ntips:['Gooi de asperge schillen niet weg; gebruik ze voor een soep.','Gebruik warmgerookte zalm, gegrilde zalm of zalmsnippers \u2014 wat jij lekkerst vindt.']},\n\n{id:'aubergine-rode-biet-lasagne',t:'Aubergine en rode biet lasagne',d:'Een groentenlasagne zonder lasagnebladen werkt top als zone maaltijd. De combinatie van rode biet met geitenkaas is favoriet.',bl:8,fav:false,gf:true,cat:'hoofd',oven:'180\u00b0 | 40 min',\ning:[{a:205,u:'g',n:'mager runder gehakt',b:'E'},{a:124,u:'g',n:'zachte geitenkaas',b:'E'},{a:313,u:'g',n:'aubergine',b:'K'},{a:427,u:'g',n:'gekookte rode bieten',b:'K'},{a:59,u:'g',n:'ui',b:'K'},{a:800,u:'g',n:'tomatenblokjes in blik',b:'K'},{a:null,u:'',n:'een beetje rucola',b:'K'},{a:4,u:'g',n:'olijfolie',b:'V'},{a:9,u:'g',n:'pijnboompitten',b:'V'},{a:124,u:'g',n:'zachte geitenkaas (ook eiwit)',b:'V'}],\nsteps:['Snij de ui fijn en kook glazig in olijfolie, knoflook (puree) en peper.','Voeg het gehakt toe met zout, peper, paprikapoeder, salie en tijm en bak gaar.','Voeg de tomatenblokjes toe en zet het vuur uit.','Snij de aubergine in dunne plakken en grill kort aan beide kanten.','Snij de bieten in dunne plakjes.','Begin in een grote ovenschaal met een laag gehakt-tomaatmix (een derde).','Voeg een laag aubergine (een derde) en een laag rode biet (de helft) toe.','Herhaal met gehakt, aubergine en bietjes, en nogmaals gehakt en aubergine.','Verkruimel de geitenkaas erover en, als gewenst, de pijnboompitten.','Bak 40 minuten in een voorverwarmde oven op 180 graden tot de kaas lichtbruin is.','Voeg een handje rucola toe op je bord.'],\ntips:['Laat de lasagne eerst afkoelen voor je hem snijdt en in bakjes bewaart \u2014 dat is makkelijker.','Het is lastig om deze lasagne mooi op je bord te krijgen; heb geduld.']},\n\n{id:'bananen-wortel-brood',t:'Bananen wortel brood',d:'Voor het Zone dieet maakte ik vaak bananenbrood. Dit is de blokken-proof versie, heel goed gelukt.',bl:12,fav:false,gf:true,cat:'ontbijt',oven:'180\u00b0 | 40 min',\ning:[{a:3,u:'st',n:'eieren',b:'E'},{a:62,u:'g',n:'magere kwark',b:'E'},{a:56,u:'g',n:'naturel eiwitpoeder',b:'E'},{a:180,u:'g',n:'banaan (\u00b1 2 bananen)',b:'K'},{a:30,u:'g',n:'dadels',b:'K'},{a:68,u:'g',n:'havermoutmeel',b:'K'},{a:132,u:'g',n:'wortel',b:'K'},{a:14,u:'g',n:'lijnzaad',b:'V'},{a:5,u:'g',n:'kokosrasp',b:'V'},{a:21,u:'g',n:'amandelmeel',b:'V'}],\nsteps:['Laat de dadels en lijnzaad weken in lauwwarm water, het liefst een paar uur.','Meng de droge ingredi\u00ebnten: eiwitpoeder, havermoutmeel, amandelmeel en kokos.','Prak de bananen met een vork en meng met de eieren en kwark.','Snij de geweekte dadels fijn (of blend ze) en voeg samen met het lijnzaad bij het banaan-ei mengsel.','Rasp de wortels en meng alles door elkaar in een grote kom.','Voeg gember, zout, kaneel en koekkruiden toe.','Bedek een kleine cakevorm (25 cm) met bakpapier en schep het deeg erin.','Bak 40 minuten op 180 graden gaar.','Controleer met een sateprikker of hij gaar is.'],\ntips:['Smeer een plak in met vanille kwark en een beetje kaneel.','Vervang een deel van de wortel door fruit zoals appel, en de kokos door gehakte amandelen.','Plakken kun je per stuk invriezen.','Grote cakevorm (30 cm)? Verdubbel alles voor een bananenbrood van 24 blokken.']},\n\n{id:'bloemkool-broodjes-avocado-makreel',t:'Bloemkool broodjes met avocado & makreel',d:'Deze kleine broodjes zien er niet alleen leuk uit, maar smaken ook goed \u2014 een leuk lunchrecept als je bijna nooit meer brood eet.',bl:8,fav:false,gf:true,cat:'hoofd',oven:'200\u00b0 | 35 min',\ning:[{a:3,u:'st',n:'eieren',b:'E'},{a:18,u:'g',n:'naturel eiwitpoeder',b:'E'},{a:92,u:'g',n:'makreel (in blik)',b:'E'},{a:608,u:'g',n:'bloemkool',b:'K'},{a:90,u:'g',n:'havermoutmeel',b:'K'},{a:80,u:'g',n:'avocado',b:'V'}],\nsteps:['Kook de bloemkool in stukken tot het zacht is.','Pureer de bloemkool met een staafmixer; verwijder zoveel mogelijk vocht.','Voeg eieren, havermoutmeel en eiwitpoeder toe en meng tot een deeg.','Voeg zout, peper, knoflookpoeder, komijnzaad en bieslook toe.','Verwarm de oven voor op 200 graden, leg bakpapier op de bakplaat.','Maak ballen van het deeg \u2014 ze rijzen nauwelijks, dus de grootte blijft hetzelfde.','Bak 35 minuten tot bruin en laat afkoelen.','Snij ze doormidden en beleg met avocado, peper, zout en makreel.'],\ntips:['Avocado maakt dit niet favorable \u2014 vervang het door amandelmeel voor een favorable versie.','Probeer verschillend beleg om je favoriete broodje te vinden.','Handig om in het weekend te maken voor lunch later in de week.']},\n\n{id:'chocolade-bananenbrood-blauwe-bessen',t:'Chocolade bananenbrood met blauwe bessen',d:'Mijn favoriete pre-zone bananenbrood recept was een choco versie met blauwe bessen \u2014 voor alle chocoladeliefhebbers.',bl:12,fav:false,gf:true,cat:'ontbijt',oven:'180\u00b0 | 40 min',\ning:[{a:3,u:'st',n:'eieren',b:'E'},{a:62,u:'g',n:'magere vanille kwark',b:'E'},{a:56,u:'g',n:'naturel eiwitpoeder',b:'E'},{a:56,u:'g',n:'eiwitpoeder chocoladesmaak',b:'E'},{a:135,u:'g',n:'banaan',b:'K'},{a:30,u:'g',n:'dadels',b:'K'},{a:68,u:'g',n:'havermoutmeel',b:'K'},{a:66,u:'g',n:'wortel',b:'K'},{a:113,u:'g',n:'blauwe bessen',b:'K'},{a:14,u:'g',n:'lijnzaad',b:'V'},{a:14,u:'g',n:'cacaopoeder',b:'V'},{a:20,u:'g',n:'pure chocola 85%',b:'V'}],\nsteps:['Laat de dadels en lijnzaad weken in lauwwarm water.','Smelt de chocolade au bain-marie.','Prak de bananen en meng door de chocolade; meng er de eieren en kwark doorheen.','Snij de geweekte dadels fijn en voeg samen met het lijnzaad bij het chocolademengsel.','Meng het eiwitpoeder, de havermout en de cacao er \u00e9\u00e9n voor \u00e9\u00e9n doorheen.','Rasp de wortels en meng alles door elkaar.','Schep de blauwe bessen er voorzichtig doorheen.','Bedek een kleine cakevorm (25 cm) en schep het deeg erin.','Bak 40 minuten op 180 graden gaar.'],\ntips:['Geen chocoladesmaak eiwitpoeder? Gebruik dan alleen naturel.','Plakken kun je per stuk invriezen.','Grote cakevorm (30 cm)? Verdubbel alles voor 24 blokken.']},\n\n{id:'forel-zoete-aardappel-linzen-salade',t:'Forel, zoete aardappel en linzen salade',d:'Gerookte forel en zoete aardappel met een mierikswortel-dressing \u2014 een makkelijk, licht gerecht.',bl:3,fav:false,gf:true,cat:'salade',oven:null,\ning:[{a:60,u:'g',n:'gerookte forelfilet',b:'E'},{a:56,u:'g',n:'h\u00fcttenk\u00e4se',b:'E'},{a:50,u:'g',n:'jonge bladsla',b:'K'},{a:74,u:'g',n:'gekookte linzen',b:'K'},{a:100,u:'g',n:'zoete aardappel',b:'K'},{a:6,u:'g',n:'olijfolie',b:'V'}],\nsteps:['Maak de zoete aardappel schoon en snij in kleine stukjes (met schil).','Gril kort: airfryer 10 min\/200\u00b0, oven \u00b120 min\/180\u00b0.','Begin met sla op het bord, voeg forel toe in stukjes, dan linzen en zoete aardappel; schep h\u00fcttenk\u00e4se erbovenop.','Meng voor de dressing 2 tl mierikswortelpuree met olijfolie, paprikapoeder, peper en zout.','Schenk de dressing over de salade.'],\ntips:['Elke bladsla werkt; jonge bladsla vind ik het lekkerst.','Linzen uit blik is prima; zelf koken kan natuurlijk ook.','Hou je niet van mierikswortel? Probeer citroensap of appelciderazijn.']},\n\n{id:'gehaktbrood',t:'Gehaktbrood',d:'Een van mijn favoriete snacks \u2014 makkelijk te maken en te snijden in het gewenste aantal blokken.',bl:12,fav:true,gf:true,cat:'hoofd',oven:'180\u00b0 | 50 min',\ning:[{a:368,u:'g',n:'mager rundergehakt',b:'E'},{a:86,u:'g',n:'gekookte kalkoen bacon',b:'E'},{a:1,u:'st',n:'ei',b:'E'},{a:45,u:'g',n:'havermout',b:'K'},{a:79,u:'g',n:'appel',b:'K'},{a:89,u:'g',n:'ui',b:'K'},{a:90,u:'g',n:'fajita (tomaten)saus',b:'K'},{a:116,u:'g',n:'rode paprika',b:'K'},{a:4,u:'g',n:'olijfolie',b:'V'}],\nsteps:['Snij kalkoenbacon, ui en rode paprika fijn.','Bak de ui glazig in olijfolie, knoflook (pasta) en peper.','Voeg de helft van de bacon en paprika toe en bak een paar minuten aan.','Doe gehakt, ei, tomatensaus, havermout en de andere helft bacon in een kom.','Voeg de ui\/bacon\/paprika-mix toe.','Snij de appel fijn en voeg toe.','Voeg naar smaak zout, peper, venkelzaad, mosterd en tijm toe.','Kneed alles goed door elkaar.','Duw de mix in een met bakpapier beklede cakevorm (25 cm), luchtvrij.','Bak 50 minuten op 180 graden gaar.'],\ntips:['Laat het gehaktbrood afkoelen voor je het uit de vorm haalt.','Zorg dat het goed gaar is \u2014 rauw gehakt is gevaarlijk.','Experimenteer met kruiden voor verschillende smaken.']},\n\n{id:'geitenkaas-peer-vijgen-salade',t:'Geitenkaas, peer en vijgen salade',d:'Een heerlijke salade met zachte geitenkaas, peer en vijgen.',bl:3,fav:false,gf:true,cat:'salade',oven:null,\ning:[{a:50,u:'g',n:'rauwe ham',b:'E'},{a:62,u:'g',n:'zachte geitenkaas',b:'E'},{a:105,u:'g',n:'peer',b:'K'},{a:103,u:'g',n:'verse vijgen',b:'K'},{a:50,u:'g',n:'jonge bladsla',b:'K'},{a:6,u:'g',n:'amandelen',b:'V'},{a:2,u:'g',n:'olijfolie',b:'V'}],\nsteps:['Leg sla op een bord en leg de rauwe ham in stukjes eroverheen.','Snij peer en vijgen in stukjes en leg op het bord.','Verkruimel de geitenkaas eroverheen.','Snij de amandelen door de helft en strooi over de salade.','Meng olijfolie met peper, limoensap en honing en schenk over de salade.'],\ntips:['Walnoten kunnen ook in plaats van amandelen.']},\n\n{id:'geroosterde-spruiten-gnocchi-geitenkaas',t:'Geroosterde spruiten, gnocchi en geitenkaas',d:'Spruitjes zijn heerlijk geroosterd, in combinatie met gnocchi, spekjes, zongedroogde tomaat en geitenkaas.',bl:4,fav:false,gf:true,cat:'hoofd',oven:'200\u00b0 | 25 min',\ning:[{a:70,u:'g',n:'geitenkaas',b:'E'},{a:70,u:'g',n:'gebakken spekjes',b:'E'},{a:130,u:'g',n:'spruitjes',b:'K'},{a:59,u:'g',n:'ui',b:'K'},{a:73,u:'g',n:'gnocchi',b:'K'},{a:11,u:'g',n:'zongedroogde tomaatjes',b:'K'},{a:4,u:'g',n:'olijfolie',b:'V'},{a:70,u:'g',n:'geitenkaas (ook vet)',b:'V'},{a:70,u:'g',n:'gebakken spekjes (ook vet)',b:'V'}],\nsteps:['Snij de ui fijn.','Maak de spruitjes schoon; snij de onderkant eraf en spoel af.','Doe spruitjes, ui en gnocchi in een kom.','Meng met olijfolie, zout, (cayenne)peper en basilicum.','Verspreid het mengsel op een met bakpapier beklede ovenplaat.','Bak 15 minuten op 200 graden.','Schep om en bak de spekjes nog 10 minuten mee.','Snij de zongedroogde tomaatjes in stukjes.','Schep alles in een schaal, voeg de tomaat toe en verkruimel de geitenkaas erover.'],\ntips:['De geitenkaas en spekjes bevatten veel vet \u2014 daarom telt er ook een blok vet voor mee.','Rauw spek kun je meteen vanaf het begin meebakken.']},\n\n{id:'geroosterde-witlof-bietjes-peer',t:'Geroosterde witlof, bietjes en peer',d:'Het zoete van peer en honing past mooi bij het bittere van witlof \u2014 een gooi-alles-in-de-oven recept.',bl:4,fav:false,gf:true,cat:'hoofd',oven:'200\u00b0 | 25 min',\ning:[{a:114,u:'g',n:'tonijnsteak',b:'E'},{a:11,u:'g',n:'geraspte Parmigiano',b:'E'},{a:150,u:'g',n:'witlof',b:'K'},{a:125,u:'g',n:'gekookte rode bietjes',b:'K'},{a:131,u:'g',n:'peer',b:'K'},{a:6,u:'g',n:'honing',b:'K'},{a:2,u:'g',n:'olijfolie',b:'V'},{a:6,u:'g',n:'walnoten',b:'V'}],\nsteps:['Bedek een bakplaat met bakpapier en verspreid de olijfolie erover.','Snij witlof, peer en bietjes in langwerpige stukken en verdeel over de plaat.','Voeg peper toe en besprenkel met honing.','Breek de walnoten in stukjes en strooi erover.','Bak 25 minuten gaar, schep halverwege om.','Bak intussen je vlees of vis naar wens \u2014 hier: tonijnsteak kort aangebakken.','Strooi de kaas over de groenten direct na de oven.'],\ntips:['Geen tips nodig: dit is zo makkelijk en zo lekker!']},\n\n{id:'groene-pilav-pangafilet',t:'Groene pilav met pangafilet',d:'Niet het mooiste bord, wel een groot bord vol lekker favorable eten.',bl:3,fav:true,gf:true,cat:'hoofd',oven:null,\ning:[{a:131,u:'g',n:'pangafilet',b:'E'},{a:304,u:'g',n:'bloemkoolrijst',b:'K'},{a:115,u:'g',n:'groene paprika',b:'K'},{a:338,u:'g',n:'snijbonen',b:'K'},{a:86,u:'g',n:'ui',b:'K'},{a:6,u:'g',n:'olijfolie',b:'V'}],\nsteps:['Snij de ui fijn en kook glazig in olijfolie, knoflook (puree) en peper.','Snij paprika en snijbonen en kook 5 minuten mee met de ui.','Voeg komijn en een kippenbouillonblokje toe met genoeg water.','Kook ongeveer 8 minuten tot al het vocht is opgenomen.','Laat het nog wat doorbakken voor een gebakken smaakje.','Kruid de pangafilet met zout, peper, paprikapoeder, peterselie en citroensap.','Bak in een beetje olijfolie een paar minuten op beide kanten gaar.'],\ntips:['Meer dan 3 blokken maken? Gebruik zilvervliesrijst voor extra koolhydraatblokken.','De groentenmix kun je in meerdere blokken tegelijk klaarmaken en later opwarmen; de pangafilet bak je per maaltijd vers.']},\n\n{id:'groene-quiche-geitenkaas',t:'Groene quiche met geitenkaas',d:'Voor iemand die groente vroeger vies vond: een quiche om zelf te ontdekken hoe lekker groen kan zijn.',bl:12,fav:false,gf:true,cat:'hoofd',oven:'180\u00b0 | 35 min',\ning:[{a:7,u:'st',n:'eieren',b:'E'},{a:205,u:'g',n:'zachte geitenkaas',b:'E'},{a:120,u:'g',n:'havermoutmeel',b:'K'},{a:180,u:'g',n:'doperwten',b:'K'},{a:83,u:'g',n:'groene kidneybonen',b:'K'},{a:118,u:'g',n:'ui',b:'K'},{a:314,u:'g',n:'spinazie',b:'K'},{a:205,u:'g',n:'geitenkaas (ook eiwit)',b:'V'},{a:21,u:'g',n:'amandelmeel',b:'V'}],\nsteps:['Snij de uien fijn.','Kook de doperwten een paar minuten.','Pureer de groene kidneybonen.','Snij de spinazie grof.','Klop de eieren en voeg tamari, zout, peper, tijm en oregano toe.','Mix de groenten, havermoutmeel en amandelmeel door het ei-beslag.','Bekleed een springvorm met bakpapier, vet de randen in en schep het mengsel erin.','Verkruimel de geitenkaas over de taart.','Bak 35 minuten op 180 graden.'],\ntips:['Het mengsel is vrij dik en los \u2014 geen zorgen, dat hoort zo.','Snij in het gewenste aantal blokken en warm een punt later 15 min op 150\u00b0 op.']},\n\n{id:'hartige-muffins',t:'Hartige muffins',d:'Een makkelijk te maken, 1 blok muffin als lekkere snack \u2014 probeer er maar 1 te eten.',bl:6,fav:false,gf:true,cat:'ontbijt',oven:'200\u00b0 | 20 min',\ning:[{a:3,u:'st',n:'eieren',b:'E'},{a:63,u:'g',n:'kwark',b:'E'},{a:98,u:'g',n:'feta',b:'E'},{a:75,u:'g',n:'havermoutmeel',b:'K'},{a:45,u:'g',n:'zongedroogde tomaatjes',b:'K'},{a:84,u:'g',n:'olijven',b:'V'}],\nsteps:['Klop de eieren in een kom en voeg de kwark toe.','Snij de tomaatjes en olijven fijn en klop door het eimengsel.','Verkruimel de feta door het mengsel.','Meng havermoutmeel, ruim basilicum, zout en knoflook door het beslag.','Verdeel over 6 muffinvormpjes.','Bak 20 minuten in de oven op 180-200 graden.'],\ntips:['Experimenteer met verschillende vullingen.','Ideaal om per stuk mee te nemen als tussendoortje.']},\n\n{id:'hartige-wafels',t:'Hartige wafels',d:'Geen trek in iets zoets? Serveer deze in plaats van toastjes of stokbrood met groentespreads.',bl:4,fav:false,gf:true,cat:'ontbijt',oven:null,\ning:[{a:3,u:'st',n:'eieren',b:'E'},{a:49,u:'g',n:'feta',b:'E'},{a:77,u:'g',n:'zoete aardappel',b:'K'},{a:null,u:'st',n:'bosui',b:'K'},{a:23,u:'g',n:'havermoutmeel',b:'K'},{a:100,u:'ml',n:'magere amandelmelk',b:'V'},{a:6,u:'g',n:'olijfolie \/ cooking spray',b:'V'}],\nsteps:['Kook de zoete aardappel in stukjes tot zacht.','Snij de bosui fijn.','Doe alle ingredi\u00ebnten (behalve de olijfolie) in een kom.','Mix tot een gladde massa met een (staaf)mixer.','Voeg zout, peper, verse peterselie en knoflook toe.','Spray het wafelijzer in met olijfolie of cooking spray.','Bak vier wafels \u2014 check je eigen wafelijzer voor de juiste tijd (hier: 3,5 min).','Smeer eventueel een groentespread erop, zoals aubergine- of wortelspread.'],\ntips:['Verdeel het beslag in 4 kleinere bakjes voor gelijke porties.','Bij groentespread kun je iets minder zoete aardappel gebruiken.']},\n\n{id:'kabeljauw-groentenpuree',t:'Kabeljauw met groentenpuree',d:'Gestoomde kabeljauw met ui en tomaat op een groentenpuree \u2014 makkelijk, top van smaak en heel fancy op je bord.',bl:3,fav:true,gf:true,cat:'hoofd',oven:null,\ning:[{a:131,u:'g',n:'kabeljauw',b:'E'},{a:59,u:'g',n:'ui',b:'K'},{a:168,u:'g',n:'tomaat',b:'K'},{a:152,u:'g',n:'bloemkool',b:'K'},{a:112,u:'g',n:'broccoli',b:'K'},{a:65,u:'g',n:'groene kidneybonen',b:'K'},{a:6,u:'g',n:'olijfolie',b:'V'}],\nsteps:['Snij ui en tomaat fijn.','Bak de ui glazig met olijfolie, peper, zout en knoflook (puree).','Voeg de tomaten en rozemarijn toe.','Bestrooi de kabeljauw met peper en zout, leg in de pan op de tomaat\/ui.','Leg een deksel erop en stoom de kabeljauw op middelhoog vuur 5 minuten gaar.','Kook bloemkool en broccoli.','Pureer broccoli, bloemkool en de gekookte kidneybonen met zout en peper.','Schep de groentenpuree op een bord, leg de kabeljauw erop en schep de ui\/tomaatmix eroverheen.'],\ntips:['Het originele recept heeft een doperwtenpuree met munt \u2014 niet favorable, maar erg lekker!']},\n\n{id:'kwarktaart',t:'Kwarktaart',d:'Een frisse koude kwarktaart met een havermout-dadelbodem en een fruitlaag, opgesteven met gelatine.',bl:8,fav:false,gf:true,cat:'ontbijt',oven:null,\ning:[{a:504,u:'g',n:'kwark (bijv. optimel Griekse stijl kers + naturel kwark)',b:'E'},{a:6,u:'g',n:'kokosolie',b:'V'},{a:15,u:'g',n:'cashewnoten',b:'V'},{a:36,u:'g',n:'dadels',b:'K'},{a:53,u:'g',n:'havermout',b:'K'},{a:1000,u:'g',n:'fruit naar keuze (bv. blauwe bessen & aardbeien)',b:'K'},{a:6,u:'st',n:'blaadjes gelatine',b:null}],\nsteps:['Week de dadels in water \u2014 hoe langer, hoe makkelijker te malen.','Maal havermout en cashewnoten fijn in blender of staafmixer.','Snij\/maal de dadels fijn en meng met havermout, cashews en kokosolie.','Kneed tot deeg en duw op de bodem van een springvorm (18 cm). Zet in de koelkast.','Week de gelatine in koud water.','Verwarm het fruit in een pannetje en pureer met een staafmixer.','Los de gelatine op in de warme fruitpuree.','Meng de kwark met de fruitpuree in een kom.','Giet de kwarkmix in de springvorm op de bodem.','Laat een nacht opstijven.'],\ntips:['Haal een sateprikker langs de rand voor je de vorm openmaakt, zodat de taart niet scheurt.','Ga vegan met agar agar in plaats van gelatine \u2014 gebruik dan iets minder fruit.','Veel plezier met andere smaakcombinaties!']},\n\n{id:'mango-curry-kip-kokos',t:'Mango curry met kip en kokos',d:'Een bord vol tropisch eten met kip en mango \u2014 een echt zomers recept.',bl:4,fav:false,gf:true,cat:'hoofd',oven:null,\ning:[{a:132,u:'g',n:'kipfilet',b:'E'},{a:134,u:'g',n:'mango',b:'K'},{a:6,u:'g',n:'bloem',b:'K'},{a:28,u:'g',n:'ui',b:'K'},{a:63,u:'g',n:'gekookte doperwten',b:'K'},{a:200,u:'g',n:'bloemkoolrijst',b:'K'},{a:92,u:'g',n:'rode paprika',b:'K'},{a:50,u:'g',n:'magere kokosmelk',b:'V'},{a:3,u:'g',n:'kokosrasp',b:'V'}],\nsteps:['Snij de kipfilet in stukjes en meng met ruim curry madras kruiden en de bloem.','Snij paprika en mango in kleine stukjes.','Snij de ui fijn en fruit glazig in een grote wokpan.','Voeg de kip toe en bak kort aan op hoog vuur.','Voeg kokosmelk, een half kippenbouillonblokje, bloemkoolrijst, paprikapoeder, komijn, gember, kurkuma, limoensap, peper en zout toe.','Voeg water toe tot alles bijna onder water staat.','Voeg paprika en mango toe en kook op matig vuur tot het meeste vocht is opgenomen.','Voeg vlak voor het opdienen de doperwten toe en laat ze warm worden.'],\ntips:['Bloem in de rauwe kip helpt de kruiden beter opnemen, maar is niet verplicht.','Favorable maken? Vervang mango door perzik\/abrikoos, laat kokosmelk en -rasp weg en gebruik cashewnoten; vervang doperwten door meer ui en paprika.']},\n\n{id:'muffins-blauwe-bessen',t:'Muffins met blauwe bessen',d:'Favorable havermout muffins met blauwe bessen die precies 1 blok per muffin zijn \u2014 heerlijk als ontbijt of tussendoortje.',bl:6,fav:true,gf:true,cat:'ontbijt',oven:'200\u00b0 | 20 min',\ning:[{a:3,u:'st',n:'eieren',b:'E'},{a:95,u:'g',n:'(vanille) kwark',b:'E'},{a:11,u:'g',n:'naturel eiwitpoeder',b:'E'},{a:67,u:'g',n:'havermoutmeel',b:'K'},{a:113,u:'g',n:'blauwe bessen',b:'K'},{a:18,u:'g',n:'amandelmeel',b:'V'}],\nsteps:['Klop de eieren los en voeg de kwark toe.','Voeg het eiwitpoeder, de havermoutmeel en de amandelmeel toe. Meng goed.','Voeg kaneel en de blauwe bessen toe.','Voeg eventueel wat stevia toe als je de muffins zoeter wilt.','Verdeel over 6 muffinvormpjes.','Bak op 200 graden 20 minuten in de oven.'],\ntips:['Controleer met een sateprikker of ze gaar zijn.','Een paar dagen houdbaar in de koelkast.','Wrapper plakt vast? Vervang 3 blokken amandelmeel door gesmolten kokosolie (niet favorable).','Experimenteer met verschillende fruitvullingen.']},\n\n{id:'pepernoten',t:'Pepernoten',d:'Zit een beetje tussen pepernoten en kruidnoten in \u2014 niet zo zoet als de winkelversie, maar zeker zone-proof.',bl:8,fav:false,gf:true,cat:'ontbijt',oven:'175\u00b0 | 10 min',\ning:[{a:1,u:'st',n:'ei',b:'E'},{a:32,u:'g',n:'vanille kwark',b:'E'},{a:46,u:'g',n:'natural eiwitpoeder',b:'E'},{a:90,u:'g',n:'havermoutmeel',b:'K'},{a:22,u:'g',n:'honing',b:'K'},{a:16,u:'g',n:'kokosolie',b:'V'},{a:null,u:'',n:'speculaaskruiden, bakpoeder, optioneel stevia',b:null}],\nsteps:['Verwarm de kokosolie op laag vuur tot vloeibaar; haal meteen van het vuur.','Meng de droge ingredi\u00ebnten: havermoutmeel, eiwitpoeder, bakpoeder, zout en speculaaskruiden.','Meng het ei, de kwark, honing en optioneel stevia in het pannetje met kokosolie.','Meng beetje bij beetje de droge ingredi\u00ebnten erdoor tot een egaal deeg.','Zet het deeg 20 minuten in de koelkast.','Verwarm de oven voor op 175 graden, leg bakpapier op de bakplaat.','Rol kleine balletjes en leg ze op het bakpapier.','Bak 10 minuten gaar en laat even afkoelen.'],\ntips:['Sla de koelkaststap niet over \u2014 dat maakt rollen makkelijker.','Plakkerig deeg? Maak je handen af en toe een beetje nat.','Voeg het ei niet toe als de kokosolie nog te heet is, anders stolt het.']},\n\n{id:'pilav-kip-perzik-noedels',t:'Pilav met kip, perzik en noedels',d:'Ge\u00efnspireerd door de pilav van mijn moeder, in een zonde versie \u2014 pittig en heerlijk met zoete abrikozen.',bl:4,fav:false,gf:true,cat:'hoofd',oven:null,\ning:[{a:132,u:'g',n:'kipfilet',b:'E'},{a:90,u:'g',n:'abrikoos',b:'K'},{a:90,u:'g',n:'(pittige) tomatensaus',b:'K'},{a:54,u:'g',n:'champignons',b:'K'},{a:100,u:'g',n:'rode paprika',b:'K'},{a:59,u:'g',n:'ui',b:'K'},{a:60,u:'g',n:'noedels',b:'K'},{a:2,u:'g',n:'olijfolie',b:'V'},{a:9,u:'g',n:'cashewnoten',b:'V'}],\nsteps:['Snij alle groenten in kleine stukjes.','Snij de kip in stukjes en marineer kort in olijfolie, ketjap, gember, sambal en zout.','Fruit de ui en voeg fijngesneden rode peper toe.','Voeg de kip toe en bak bruin.','Voeg champignons en paprika toe, bak even aan en voeg de tomatensaus toe.','Voeg abrikoos en noedels toe zodra de groente naar smaak zacht is; bak een paar minuten mee.','Zet het vuur uit en mix de cashewnoten er vlak voor het opdienen doorheen.'],\ntips:['Niet van pittig? Laat sambal en rode peper weg.','Favorable maken: vervang noedels door bloemkoolrijst.','9 gram cashewnoten is niet veel \u2014 snij ze in stukjes om te verdelen.']},\n\n{id:'pompoenstoof-worst',t:'Pompoenstoof met worst',d:'De pompoen en kruiden maken dit stoofpotje heerlijk herfstig \u2014 wat mij betreft zeer geslaagd.',bl:12,fav:false,gf:true,cat:'hoofd',oven:null,\ning:[{a:467,u:'g',n:'runderchipolata (telt als eiwit \u00e9n vet)',b:'E'},{a:419,u:'g',n:'pompoen',b:'K'},{a:119,u:'g',n:'ui',b:'K'},{a:251,u:'g',n:'tomaat',b:'K'},{a:143,u:'g',n:'basis tomatensaus',b:'K'},{a:130,u:'g',n:'gekookte linzen',b:'K'},{a:88,u:'g',n:'gekookte kidneybonen',b:'K'},{a:130,u:'g',n:'gekookte cannellinibonen',b:'K'},{a:3,u:'g',n:'olijfolie',b:'V'}],\nsteps:['Snij de ui fijn en de pompoen en tomaten in blokjes.','Bak de ui glazig in olijfolie en knoflook.','Voeg pompoen, tomaten en tomatensaus toe.','Voeg kaneel, venkelzaad, nootmuskaat, zout en peper toe.','Voeg een runderbouillonblokje met water toe \u2014 de groenten hoeven niet helemaal onder water.','Kook 20 minuten op medium-laag vuur.','Spoel de bonen af en kook nog 5 minuten mee.','Bak de runderchipolata in een andere pan in 6 minuten gaar.','Serveer in stukjes op de pompoenstoof.'],\ntips:['De worstjes bevatten veel vet \u2014 daarom telt er ook een blok vet voor mee.','Makkelijk om een grote portie te maken en de rest in de koelkast te bewaren.']},\n\n{id:'rijstpudding-mango-kokos',t:'Rijstpudding met mango en kokos',d:'Dit tropisch ontbijt of toetje doet denken aan palmbomen en blauwe oceanen \u2014 een zoete variatie op je kwarkmaaltijd.',bl:3,fav:false,gf:true,cat:'ontbijt',oven:null,\ning:[{a:186,u:'g',n:'vanille- of kokoskwark',b:'E'},{a:23,u:'g',n:'risotto- of desertrijst',b:'K'},{a:67,u:'g',n:'mango',b:'K'},{a:75,u:'g',n:'kokosmelk light',b:'V'},{a:null,u:'',n:'vanillestokje',b:null},{a:1,u:'st',n:'blaadje gelatine',b:null}],\nsteps:['Week de gelatine in koud water.','Hou een derde van de kokosmelk apart; kook de rijst met de rest gaar (beetje bij beetje toevoegen, 15-20 min).','Verwarm de rest van de kokosmelk apart en los de gelatine erin op.','Voeg de vanille toe (schraap het merg uit het stokje).','Snij de mango in kleine stukjes, hou wat apart voor de decoratie.','Meng de kwark met de rijst, kokosmelk en mango.','Schep in glaasjes en zet enkele uren of een nacht in de koelkast.','Dien op met de aparte mangostukjes bovenop.'],\ntips:['Meer kokossmaak gewenst? Laat het weten als je een tip hebt!','Maak de rijst in grotere porties tegelijk \u2014 dat is makkelijker.','Je kunt de mango ook pureren als apart laagje voor een mooi toetje.']},\n\n{id:'rode-biet-geitenkaas-broccoli',t:'Rode biet, geitenkaas en broccoli',d:'Ben je een geitenkaas fan? Dan is dit een heerlijke combi.',bl:4,fav:false,gf:true,cat:'hoofd',oven:null,\ning:[{a:123,u:'g',n:'zachte geitenkaas (met honing)',b:'E'},{a:122,u:'g',n:'gekookte rode biet',b:'K'},{a:223,u:'g',n:'broccoli',b:'K'},{a:15,u:'g',n:'quinoa',b:'K'},{a:4,u:'g',n:'walnoten',b:'V'},{a:2,u:'g',n:'walnootolie',b:'V'}],\nsteps:['Verwarm de rode bieten 15 minuten in de oven op 200 graden.','Kook de broccoli beetgaar.','Kook de quinoa volgens de verpakking.','Verkruimel de geitenkaas en hak de walnoten in stukjes.','Voeg peterselie, gember en walnoten toe aan de geitenkaas.','Meng broccoli, quinoa, zout, peper en walnootolie.','Schep op een bord, leg de rode biet ernaast en schep de geitenkaas over de bieten.'],\ntips:['Dit eet ik niet te vaak \u2014 geitenkaas bevat veel vet.','Snij ook de bieten en serveer alles door elkaar als salade.','Koud smaakt het ook goed \u2014 handig om vooraf te preppen.']},\n\n{id:'zalm-pompoen-sambal-boontjes',t:'Zalm, geroosterde pompoen & sambal goreng boontjes',d:'Zalm uit de oven met sambal goreng boontjes \u2014 hier kan ik echt van blijven eten.',bl:4,fav:false,gf:true,cat:'hoofd',oven:'180\u00b0 | 20 min',\ning:[{a:136,u:'g',n:'zalm',b:'E'},{a:180,u:'g',n:'haricots verts',b:'K'},{a:279,u:'g',n:'pompoen',b:'K'},{a:11,u:'g',n:'kokoscr\u00e8me',b:'V'}],\nsteps:['Leg de zalm in een ovenschaal en bestrooi met knoflook, zout, peper, paprikapoeder, komijnzaad, koriander en gember.','Snij de pompoen in kleine stukjes en kook 5 minuten.','Laat uitlekken en meng met knoflook, zout, peper en gember.','Verspreid op een met bakpapier beklede ovenplaat.','Rooster pompoen en zalm 20 minuten gaar op 180 graden.','Kook de haricots verts ongeveer 10 minuten.','Doe ketjap, gember, laos en sambal in een wokpan.','Voeg op laag vuur de kokoscr\u00e8me toe met een beetje water; blijf water toevoegen als het te dik wordt.','Laat de boontjes uitlekken en schep ze door de kruidenpasta.','Serveer alles samen zodra de oven klaar is.'],\ntips:['De pompoen is lekkerder geheel in de oven gegaard (45 min\/220\u00b0), maar dat duurt langer.','Een beetje olijfolie maakt het extra lekker; gebruik dan iets minder kokoscr\u00e8me.']},\n\n{id:'zoete-aardappel-pompoen-quiche',t:'Zoete aardappel pompoen quiche',d:'Een lekkere oranje herfstige quiche \u2014 maar smaakt de rest van het jaar ook heerlijk.',bl:6,fav:false,gf:true,cat:'hoofd',oven:'180\u00b0 | 40 min',\ning:[{a:4,u:'st',n:'eieren',b:'E'},{a:42,u:'g',n:'geraspte parmezaanse kaas',b:'E'},{a:279,u:'g',n:'pompoen',b:'K'},{a:106,u:'g',n:'zoete aardappel',b:'K'},{a:59,u:'g',n:'ui',b:'K'},{a:115,u:'g',n:'rode paprika',b:'K'},{a:100,u:'g',n:'magere amandelmelk',b:'V'},{a:6,u:'g',n:'olijfolie',b:'V'}],\nsteps:['Snij pompoen, zoete aardappel, paprika en ui in kleine stukjes.','Mix pompoen en zoete aardappel met olijfolie, peper, zout en komijn.','Grill ze kort (airfryer: 7 min pompoen, 10 min zoete aardappel).','Fruit de ui glazig met olijfolie en knoflook (puree).','Voeg de paprika toe en bak een paar minuten mee.','Bekleed een springvorm (18 cm) met bakpapier of vet hem in.','Meng alle groenten en schep in de vorm.','Klop de eieren met amandelmelk, zout, peper, nootmuskaat en tijm.','Voeg een derde van de kaas toe en giet over de groenten; strooi de rest erover.','Bak 40 minuten op 180 graden in een voorverwarmde oven.'],\ntips:['Je kunt de groenten ook in de oven grillen; lekkerder, maar niet noodzakelijk.']},\n\n{id:'zoete-aardappel-roti',t:'Zoete Aardappel Roti',d:'Als je van zoete aardappel gerechten houdt vind je dit vast heel lekker. Heel geschikt om te preppen.',bl:4,fav:false,gf:true,cat:'hoofd',oven:null,\ning:[{a:99,u:'g',n:'kipfilet',b:'E'},{a:1,u:'st',n:'gekookt ei',b:'E'},{a:30,u:'g',n:'ui',b:'K'},{a:115,u:'g',n:'rode paprika',b:'K'},{a:75,u:'g',n:'kousenband',b:'K'},{a:80,u:'g',n:'zoete aardappel',b:'K'},{a:null,u:'st',n:'halve rotiplaat',b:'K'},{a:8,u:'g',n:'olijfolie',b:'V'}],\nsteps:['Snij de kipfilet in blokjes, meng met de helft van de olijfolie en masala kruiden. Laat even staan.','Snij ui, paprika en kousenband fijn.','Kook de ui in de andere helft olijfolie met knoflook (paste) tot glazig.','Voeg de kipfilet toe en bak bruin.','Snij de zoete aardappel in stukjes van 1 cm en voeg toe. Laat even koken.','Voeg een half kip-bouillonblokje en water toe (net niet onder water).','Voeg masala kruiden, zout en peper toe.','Laat \u00b1 15 minuten koken tot de zoete aardappel bijna zacht is; roer regelmatig.','Kook de kousenband intussen 15 minuten gaar.','Voeg de paprika toe, laat 5-10 minuten koken.','Kook tot het vocht is opgenomen; voeg water toe als het te droog wordt.','Laat de kousenband uitlekken, voeg toe en schep goed door.','Eet met een gekookt ei en een halve rotiplaat.'],\ntips:['Perfect om in meerdere blokken te maken en later op te warmen.','Geen kousenband? Gebruik 156 gram snijbonen.','Geen fan van gekookt ei? Vervang door meer kipfilet.','Kleinere portie? Laat de rotiplaat weg en voeg meer zoete aardappel toe.']},\n\n{id:'zoete-aardappel-stamppot',t:'Zoete aardappel stamppot',d:'Een italiaans gerecht met mozzarella, zongedroogde tomaat en rucola \u2014 heerlijk.',bl:4,fav:false,gf:true,cat:'hoofd',oven:null,\ning:[{a:40,u:'g',n:'uitgebakken spekjes',b:'E'},{a:80,u:'g',n:'mozzarella (ook vet)',b:'E'},{a:122,u:'g',n:'zoete aardappel',b:'K'},{a:59,u:'g',n:'ui',b:'K'},{a:25,u:'g',n:'zongedroogde tomaat',b:'K'},{a:null,u:'',n:'een beetje rucola',b:null},{a:80,u:'g',n:'mozzarella (ook eiwit)',b:'V'},{a:2,u:'g',n:'olijfolie',b:'V'},{a:2,u:'g',n:'walnoten in stukjes',b:'V'}],\nsteps:['Snij de zoete aardappel in stukken en kook tot zacht.','Snij de ui fijn en bak glazig in olijfolie, knoflook, zout en peper.','Laat de aardappel uitlekken en pureer met een (staaf)mixer.','Snij mozzarella en zongedroogde tomaatjes in kleine stukjes.','Meng door de aardappelpuree: ui, spekjes, mozzarella, zongedroogde tomaatjes, zout, peper en tijm.','Meng er rucola en walnootstukjes doorheen.'],\ntips:['Maak een grote pan en bewaar in bakjes in de koelkast.','Kleinere porties raad ik niet aan, tenzij een klein bordje eten je niet stoort.','Speel met de verhoudingen: iets meer spekjes en minder mozzarella voor wat extra vet uit walnoten.']},\n\n{id:'zuurkooltaart',t:'Zuurkooltaart',d:'Deze hartige taart smaakt niet alleen lekker bij koud weer \u2014 ook als je geen zuurkoolfan bent, is dit best lekker; niet te zuur.',bl:12,fav:false,gf:true,cat:'hoofd',oven:'180\u00b0 | 45 min',\ning:[{a:3,u:'st',n:'eieren',b:'E'},{a:200,u:'g',n:'feta',b:'E'},{a:166,u:'g',n:'spekjes',b:'E'},{a:500,u:'g',n:'gekookte zuurkool',b:'K'},{a:307,u:'g',n:'zoete aardappel',b:'K'},{a:25,u:'g',n:'cranberries',b:'K'},{a:59,u:'g',n:'ui',b:'K'},{a:304,u:'g',n:'bloemkool',b:'K'},{a:30,u:'g',n:'havermout',b:'K'},{a:3,u:'g',n:'olijfolie',b:'V'},{a:15,u:'g',n:'amandelmeel',b:'V'},{a:20,u:'g',n:'zonnebloempitten',b:'V'}],\nsteps:['Laat de zuurkool goed uitlekken en knijp zoveel mogelijk vocht eruit.','Snij de ui fijn en bak kort aan met olijfolie, knoflook, zout en peper.','Voeg de spekjes toe en bak even mee.','Snij de zoete aardappel in kleine stukjes en kook zacht; kook ook de bloemkool gaar.','Pureer de zoete aardappel en bloemkool.','Meng in een grote kom: de puree, zuurkool, eieren, de gebakken ui\/spekjes, havermout, cranberries en amandelmeel.','Voeg ruim verse tijm, zout en peper toe.','Bekleed een grote springvorm met bakpapier en vet de zijkanten in.','Schep het mengsel in de vorm en druk licht aan.','Verkruimel de feta erover met de zonnebloempitten.','Bak \u00b1 45 minuten gaar op 180 graden.'],\ntips:['Haal een sateprikker langs de rand zodat de taart niet aan de vorm blijft plakken.']},\n];\n\nconst BLOCK_LABEL = {E:'Eiwit',K:'Koolhydraten',V:'Vet'};\nconst CUSTOM_KEY = 'zonekeuken_custom_recipes_v1';\n\nfunction loadCustom(){\n  try{\n    const raw = localStorage.getItem(CUSTOM_KEY);\n    return raw ? JSON.parse(raw) : [];\n  }catch(e){\n    console.error('Kon eigen recepten niet laden', e);\n    return [];\n  }\n}\nfunction saveCustom(list){\n  try{\n    localStorage.setItem(CUSTOM_KEY, JSON.stringify(list));\n    return true;\n  }catch(e){\n    console.error('Kon eigen recepten niet opslaan', e);\n    return false;\n  }\n}\nlet customRecipes = loadCustom();\nfunction allRecipes(){ return R.concat(customRecipes); }\n\nlet state = {filter:'all', q:''};\n\nfunction matches(r){\n  if(state.filter==='fav' && !r.fav) return false;\n  if(state.filter==='gf' && !r.gf) return false;\n  if(state.filter==='ontbijt' && r.cat!=='ontbijt') return false;\n  if(state.filter==='hoofd' && !(r.cat==='hoofd'||r.cat==='salade')) return false;\n  if(state.q){\n    const q = state.q.toLowerCase();\n    const hay = (r.t + ' ' + r.d + ' ' + r.ing.map(i=>i.n).join(' ')).toLowerCase();\n    if(!hay.includes(q)) return false;\n  }\n  return true;\n}\n\nfunction renderGrid(){\n  const all = allRecipes();\n  const list = all.filter(matches);\n  document.getElementById('count').textContent = list.length + ' van ' + all.length + ' recepten';\n  const grid = document.getElementById('grid');\n  grid.innerHTML='';\n  document.getElementById('emptyMsg').style.display = list.length? 'none':'block';\n  list.forEach(r=>{\n    const card = document.createElement('button');\n    card.className='card';\n    card.setAttribute('type','button');\n    card.innerHTML = `\n      <div class=\"meta-row\">\n        <span class=\"blocks-badge\">${r.bl}<\/span>\n        ${r.fav?'<span class=\"tag fav\">Favorable<\/span>':''}\n        ${r.gf?'<span class=\"tag gf\">Glutenvrij<\/span>':''}\n        ${r.custom?'<span class=\"custom-badge\">eigen<\/span>':''}\n      <\/div>\n      <h3>${r.t}<\/h3>\n      <p>${r.d}<\/p>\n    `;\n    card.addEventListener('click',()=>openDetail(r.id));\n    grid.appendChild(card);\n  });\n}\n\nfunction fmt(n){\n  if(n===null||n===undefined) return '';\n  const rounded = Math.round(n*10)\/10;\n  return (rounded % 1 === 0) ? rounded.toFixed(0) : rounded.toFixed(1);\n}\n\nfunction openDetail(id){\n  const r = allRecipes().find(x=>x.id===id);\n  if(!r) return;\n  document.getElementById('browse').classList.add('hidden');\n  const d = document.getElementById('detail');\n  d.classList.add('open');\n\n  const totalE = r.ing.filter(i=>i.b==='E').reduce((s,i)=>s+ (typeof i.a==='number'?0:0),0); \/\/ placeholder, real calc below with blocks not grams\n  \/\/ block counts come from the label numbers embedded originally isn't stored; instead recompute scale purely on blocks total (r.bl)\n\n  d.innerHTML = `\n    <button class=\"back\" id=\"backBtn\">\u2190 Terug naar alle recepten<\/button>\n    <div class=\"detail-head\">\n      <h2>${r.t}<\/h2>\n      <p class=\"desc\">${r.d}<\/p>\n      <div class=\"detail-meta\">\n        <span class=\"meta-pill ${r.fav?'fav':''}\">${r.bl} blokken<\/span>\n        ${r.fav?'<span class=\"meta-pill fav\">Favorable<\/span>':''}\n        ${r.gf?'<span class=\"meta-pill\">Glutenvrij<\/span>':''}\n        ${r.oven?'<span class=\"meta-pill\">'+r.oven+'<\/span>':''}\n        ${r.custom?'<span class=\"custom-badge\">eigen recept<\/span><button class=\"del-recipe\" id=\"delRecipeBtn\" type=\"button\">Verwijderen<\/button>':''}\n      <\/div>\n    <\/div>\n    <div class=\"layout\">\n      <div>\n        <div class=\"calc\">\n          <h3>Blokkenrekenaar<\/h3>\n          <p class=\"sub\">Origineel: ${r.bl} blokken. Pas aan naar het aantal blokken dat jij nodig hebt \u2014 alle hoeveelheden schalen automatisch mee.<\/p>\n          <div class=\"calc-input-row\">\n            <div class=\"stepper\">\n              <button id=\"dec\" type=\"button\" aria-label=\"minder blokken\">\u2212<\/button>\n              <input id=\"blockInput\" type=\"number\" min=\"0.5\" step=\"0.5\" value=\"${r.bl}\">\n              <button id=\"inc\" type=\"button\" aria-label=\"meer blokken\">+<\/button>\n            <\/div>\n          <\/div>\n          <button class=\"reset-link\" id=\"resetBtn\" type=\"button\">Terug naar origineel (${r.bl})<\/button>\n          <div class=\"evbdown\" id=\"evbdown\"><\/div>\n        <\/div>\n        <div class=\"legend\" style=\"margin-top:18px;\">\n          <span><i style=\"background:var(--e)\"><\/i> E = eiwit<\/span>\n          <span><i style=\"background:var(--k)\"><\/i> K = koolhydraten<\/span>\n          <span><i style=\"background:var(--v)\"><\/i> V = vet<\/span>\n        <\/div>\n      <\/div>\n      <div>\n        <h3 class=\"section-title\">Ingredi\u00ebnten<\/h3>\n        <ul class=\"ing-list\" id=\"ingList\"><\/ul>\n        <h3 class=\"section-title\">Bereiding<\/h3>\n        <ol class=\"steps\">${r.steps.map(s=>`<li>${s}<\/li>`).join('')}<\/ol>\n        ${r.tips && r.tips.length ? `<div class=\"tips\"><h4>Tips<\/h4><ul>${r.tips.map(t=>`<li>${t}<\/li>`).join('')}<\/ul><\/div>` : ''}\n      <\/div>\n    <\/div>\n  `;\n\n  document.getElementById('backBtn').addEventListener('click', closeDetail);\n  const delBtn = document.getElementById('delRecipeBtn');\n  if(delBtn){\n    delBtn.addEventListener('click', ()=>{\n      if(!confirm('Dit eigen recept verwijderen? Dit kan niet ongedaan worden gemaakt.')) return;\n      customRecipes = customRecipes.filter(x=>x.id!==r.id);\n      saveCustom(customRecipes);\n      closeDetail();\n      renderGrid();\n    });\n  }\n  const input = document.getElementById('blockInput');\n  const dec = document.getElementById('dec');\n  const inc = document.getElementById('inc');\n  const reset = document.getElementById('resetBtn');\n\n  function draw(){\n    let target = parseFloat(input.value);\n    if(isNaN(target) || target<0) target = r.bl;\n    const scale = target \/ r.bl;\n    const ingList = document.getElementById('ingList');\n    ingList.innerHTML = r.ing.map(i=>{\n      const blkClass = i.b ? i.b.toLowerCase() : 'none';\n      const blkLabel = i.b || '\u2013';\n      let amtStr;\n      if(i.a === null){\n        amtStr = i.u ? '' : '';\n        amtStr = '\u2014';\n      } else {\n        amtStr = fmt(i.a*scale) + ' ' + i.u;\n      }\n      return `<li><span class=\"blk ${blkClass}\">${blkLabel}<\/span><span class=\"ing-amt\">${amtStr}<\/span><span class=\"ing-name\">${i.n}<\/span><\/li>`;\n    }).join('');\n\n    \/\/ recompute E\/K\/V block totals proportionally from original composition\n    const sumBy = t => r.ing.filter(i=>i.b===t).reduce((s,i)=> s + (typeof i.a==='number'? 1:0),0);\n    \/\/ We don't have literal block-count per ingredient stored (only grams), so approximate\n    \/\/ total block breakdown using original recipe's declared total split evenly is not accurate;\n    \/\/ instead just show the scaled overall total per type as r.bl*scale for E\/K\/V (they're equal by Zone design).\n    const evbdown = document.getElementById('evbdown');\n    const val = fmt(r.bl*scale);\n    evbdown.innerHTML = `\n      <div class=\"evb e\"><b>${val}<\/b>E<\/div>\n      <div class=\"evb k\"><b>${val}<\/b>K<\/div>\n      <div class=\"evb v\"><b>${val}<\/b>V<\/div>\n    `;\n  }\n\n  input.addEventListener('input', draw);\n  dec.addEventListener('click', ()=>{ input.value = Math.max(0.5, (parseFloat(input.value)||r.bl) - 0.5); draw(); });\n  inc.addEventListener('click', ()=>{ input.value = (parseFloat(input.value)||r.bl) + 0.5; draw(); });\n  reset.addEventListener('click', ()=>{ input.value = r.bl; draw(); });\n\n  draw();\n  window.scrollTo({top:0,behavior:'instant'});\n}\n\nfunction closeDetail(){\n  document.getElementById('detail').classList.remove('open');\n  document.getElementById('detail').innerHTML='';\n  document.getElementById('browse').classList.remove('hidden');\n}\n\ndocument.getElementById('filterTags').addEventListener('click', e=>{\n  const btn = e.target.closest('.chip-btn');\n  if(!btn) return;\n  document.querySelectorAll('.chip-btn').forEach(b=>b.classList.remove('active'));\n  btn.classList.add('active');\n  state.filter = btn.dataset.filter;\n  renderGrid();\n});\n\ndocument.getElementById('search').addEventListener('input', e=>{\n  state.q = e.target.value.trim();\n  renderGrid();\n});\n\n\/* --- eigen recept toevoegen --- *\/\nfunction ingRowHtml(){\n  return `<div class=\"ing-row\">\n    <input type=\"text\" class=\"ing-amount\" placeholder=\"bv. 150\">\n    <select class=\"ing-unit\">\n      <option value=\"g\">gram<\/option>\n      <option value=\"ml\">ml<\/option>\n      <option value=\"st\">stuks<\/option>\n      <option value=\"\">\u2013<\/option>\n    <\/select>\n    <input type=\"text\" class=\"ing-name\" placeholder=\"naam ingredi\u00ebnt\">\n    <select class=\"ing-block\">\n      <option value=\"E\">E \u2014 eiwit<\/option>\n      <option value=\"K\">K \u2014 koolh.<\/option>\n      <option value=\"V\">V \u2014 vet<\/option>\n      <option value=\"\">geen blok<\/option>\n    <\/select>\n    <button type=\"button\" class=\"rm-row\" title=\"verwijder rij\">\u2715<\/button>\n  <\/div>`;\n}\nfunction addIngRow(){\n  const wrap = document.getElementById('ingRows');\n  const div = document.createElement('div');\n  div.innerHTML = ingRowHtml();\n  const rowEl = div.firstElementChild;\n  rowEl.querySelector('.rm-row').addEventListener('click', ()=> rowEl.remove());\n  wrap.appendChild(rowEl);\n}\nfunction resetForm(){\n  document.getElementById('f-title').value='';\n  document.getElementById('f-desc').value='';\n  document.getElementById('f-blocks').value=4;\n  document.getElementById('f-cat').value='hoofd';\n  document.getElementById('f-oven').value='';\n  document.getElementById('f-fav').checked=false;\n  document.getElementById('f-gf').checked=true;\n  document.getElementById('f-steps').value='';\n  document.getElementById('f-tips').value='';\n  document.getElementById('formMsg').textContent='';\n  document.getElementById('ingRows').innerHTML='';\n  for(let i=0;i<4;i++) addIngRow();\n}\n\nfunction openForm(){\n  document.getElementById('browse').classList.add('hidden');\n  document.getElementById('detail').classList.remove('open');\n  document.getElementById('addForm').classList.add('open');\n  resetForm();\n  window.scrollTo({top:0,behavior:'instant'});\n}\nfunction closeForm(){\n  document.getElementById('addForm').classList.remove('open');\n  document.getElementById('browse').classList.remove('hidden');\n}\n\ndocument.getElementById('addRecipeBtn').addEventListener('click', openForm);\ndocument.getElementById('cancelAddBtn').addEventListener('click', closeForm);\ndocument.getElementById('addIngRow').addEventListener('click', addIngRow);\n\ndocument.getElementById('saveRecipeBtn').addEventListener('click', ()=>{\n  const title = document.getElementById('f-title').value.trim();\n  const msg = document.getElementById('formMsg');\n  if(!title){ msg.textContent = 'Geef het recept een titel.'; msg.style.color = '#B5432F'; return; }\n\n  const blocks = parseFloat(document.getElementById('f-blocks').value) || 1;\n  const rows = Array.from(document.querySelectorAll('#ingRows .ing-row'));\n  const ing = rows.map(row=>{\n    const amtRaw = row.querySelector('.ing-amount').value.trim();\n    const name = row.querySelector('.ing-name').value.trim();\n    const unit = row.querySelector('.ing-unit').value;\n    const blk = row.querySelector('.ing-block').value || null;\n    if(!name) return null;\n    const amt = amtRaw === '' ? null : parseFloat(amtRaw.replace(',','.'));\n    return { a: (amt===null||isNaN(amt)) ? null : amt, u: unit, n: name, b: blk };\n  }).filter(Boolean);\n\n  if(ing.length===0){ msg.textContent = 'Voeg minstens \u00e9\u00e9n ingredi\u00ebnt toe.'; msg.style.color = '#B5432F'; return; }\n\n  const steps = document.getElementById('f-steps').value.split('\\n').map(s=>s.trim()).filter(Boolean);\n  const tips = document.getElementById('f-tips').value.split('\\n').map(s=>s.trim()).filter(Boolean);\n\n  const id = 'custom-' + Date.now() + '-' + Math.random().toString(36).slice(2,7);\n  const recipe = {\n    id, custom:true,\n    t:title,\n    d:document.getElementById('f-desc').value.trim() || '(geen beschrijving)',\n    bl:blocks,\n    fav:document.getElementById('f-fav').checked,\n    gf:document.getElementById('f-gf').checked,\n    cat:document.getElementById('f-cat').value,\n    oven:document.getElementById('f-oven').value.trim() || null,\n    ing, steps,\n    tips: tips.length ? tips : null\n  };\n\n  customRecipes.push(recipe);\n  const ok = saveCustom(customRecipes);\n  if(!ok){\n    msg.textContent = 'Opslaan mislukt \u2014 mogelijk zit je browseropslag vol.';\n    msg.style.color = '#B5432F';\n    return;\n  }\n  closeForm();\n  renderGrid();\n  openDetail(id);\n});\n\nrenderGrid();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Zone Keuken \u2014 recepten &amp; blokkenrekenaar ZoneKeuken 28 RECEPTEN \u00b7 BLOKKENREKENAAR Alles Favorable Glutenvrij Zoet \/ gebak Hoofdgerecht + Recept toevoegen Niets gevonden. Probeer een andere zoekterm. \u2190 Terug naar alle recepten Eigen recept toevoegen Dit recept wordt alleen in d\u00e9ze browser opgeslagen (localStorage) \u2014 niet gedeeld met anderen en niet zichtbaar op een ander [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/recepten.crossfitmuiden.nl\/index.php?rest_route=\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/recepten.crossfitmuiden.nl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/recepten.crossfitmuiden.nl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/recepten.crossfitmuiden.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/recepten.crossfitmuiden.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2"}],"version-history":[{"count":2,"href":"https:\/\/recepten.crossfitmuiden.nl\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":8,"href":"https:\/\/recepten.crossfitmuiden.nl\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions\/8"}],"wp:attachment":[{"href":"https:\/\/recepten.crossfitmuiden.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}