<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chocolate on Recipe Book</title><link>https://recipes.uuard.com/tags/chocolate/</link><description>Recent content in Chocolate on Recipe Book</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://recipes.uuard.com/tags/chocolate/index.xml" rel="self" type="application/rss+xml"/><item><title>Chocolate Biscotti</title><link>https://recipes.uuard.com/docs/recipes/chocolate_biscotti/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/chocolate_biscotti/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;All-Purpose Flour&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="flour_all_purpose"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;All-Purpose Flour&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="82.00000000"
 
 &gt;
 &lt;td&gt;Egg, Whole&lt;/td&gt;
 &lt;td&gt;82.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="78.00000000"
 
 &gt;
 &lt;td&gt;Sugar&lt;/td&gt;
 &lt;td&gt;78.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="70.00000000"
 
 &gt;
 &lt;td&gt;Chocolate Chunks, Chopped&lt;/td&gt;
 &lt;td&gt;70.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="16.00000000"
 
 &gt;
 &lt;td&gt;Cocoa Powder&lt;/td&gt;
 &lt;td&gt;16.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="2.50000000"
 
 &gt;
 &lt;td&gt;Baking Soda&lt;/td&gt;
 &lt;td&gt;2.50&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="2.10000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;2.10&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.00000000"
 
 &gt;
 &lt;td&gt;Espresso Powder&lt;/td&gt;
 &lt;td&gt;1.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.80000000"
 
 &gt;
 &lt;td&gt;Salt&lt;/td&gt;
 &lt;td&gt;0.80&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.70000000"
 
 &gt;
 &lt;td&gt;Almond Extract&lt;/td&gt;
 &lt;td&gt;0.70&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;353.10&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Line sheet pan with parchment paper.&lt;/li&gt;
&lt;li&gt;Sift flour, baking soda, cocoa powder.&lt;/li&gt;
&lt;li&gt;Whip eggs, sugar, vanilla, almond extract and salt high until thick and light, ≈5 min.&lt;/li&gt;
&lt;li&gt;Mix in sifted dry at low speed until just incorporated.&lt;/li&gt;
&lt;li&gt;Fold in chocolate and (almonds).&lt;/li&gt;
&lt;li&gt;Form dough into strip on sheet pan.&lt;/li&gt;
&lt;li&gt;Bake 300 °F 50 min.&lt;/li&gt;
&lt;li&gt;Remove to cool 10 min.&lt;/li&gt;
&lt;li&gt;Cut slices 1/2 in.&lt;/li&gt;
&lt;li&gt;Bake 12 min at 275 °F.&lt;/li&gt;
&lt;li&gt;Flip.&lt;/li&gt;
&lt;li&gt;Bake 12 min at 275 °F.&lt;/li&gt;
&lt;li&gt;Cooling rack, cool completely.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;1100 g dough / 1/4 sheet pan.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Chocolate Chip Cookie</title><link>https://recipes.uuard.com/docs/recipes/chocolate_chip_cookie/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/chocolate_chip_cookie/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Bread Flour&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="flour_bread"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Bread Flour&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="110.53000000"
 
 &gt;
 &lt;td&gt;Chocolate Chip&lt;/td&gt;
 &lt;td&gt;110.53&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="70.79000000"
 
 &gt;
 &lt;td&gt;Butter&lt;/td&gt;
 &lt;td&gt;70.79&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="52.63000000"
 
 &gt;
 &lt;td&gt;Brown Sugar&lt;/td&gt;
 &lt;td&gt;52.63&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="44.21000000"
 
 &gt;
 &lt;td&gt;Sugar&lt;/td&gt;
 &lt;td&gt;44.21&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="31.58000000"
 
 &gt;
 &lt;td&gt;Egg, Whole&lt;/td&gt;
 &lt;td&gt;31.58&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.68000000"
 
 &gt;
 &lt;td&gt;Salt&lt;/td&gt;
 &lt;td&gt;1.68&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.58000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;1.58&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.11000000"
 
 &gt;
 &lt;td&gt;Baking Soda&lt;/td&gt;
 &lt;td&gt;1.11&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;414.11&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Cream butter, sugar.&lt;/li&gt;
&lt;li&gt;Gradually add eggs.&lt;/li&gt;
&lt;li&gt;Add vanilla.&lt;/li&gt;
&lt;li&gt;Combine bread flour, baking soda.&lt;/li&gt;
&lt;li&gt;Mix to 50% incorporation.&lt;/li&gt;
&lt;li&gt;Add chocolate chips.&lt;/li&gt;
&lt;li&gt;Mix until just incorporated.&lt;/li&gt;
&lt;li&gt;Roll into 17 in log.&lt;/li&gt;
&lt;li&gt;Wrap in parchment, refrigerate.&lt;/li&gt;
&lt;li&gt;Cut to 100 g portions.&lt;/li&gt;
&lt;li&gt;Place on parchment sheet pans.&lt;/li&gt;
&lt;li&gt;Bake 380 °F 10-12 min.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;</description></item><item><title>Chocolate Ganache</title><link>https://recipes.uuard.com/docs/recipes/chocolate_ganache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/chocolate_ganache/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Dark Chocolate&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="dark_chocolate"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Dark Chocolate&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="105.00000000"
 
 &gt;
 &lt;td&gt;Heavy Cream&lt;/td&gt;
 &lt;td&gt;105.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;205.00&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Heat heavy cream to 100 °F.&lt;/li&gt;
&lt;li&gt;Pour over chocolate chips, stirring.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;</description></item><item><title>Creamed Chocolate Chip Muffin</title><link>https://recipes.uuard.com/docs/recipes/creamed_chocolate_chip_muffin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/creamed_chocolate_chip_muffin/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Cake Flour&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="flour_cake"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Cake Flour&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="90.00000000"
 
 &gt;
 &lt;td&gt;Shortening&lt;/td&gt;
 &lt;td&gt;90.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="50.00000000"
 
 &gt;
 &lt;td&gt;Sugar&lt;/td&gt;
 &lt;td&gt;50.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="30.00000000"
 
 &gt;
 &lt;td&gt;Egg, Whole&lt;/td&gt;
 &lt;td&gt;30.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="30.00000000"
 
 &gt;
 &lt;td&gt;Chocolate Chip&lt;/td&gt;
 &lt;td&gt;30.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="15.00000000"
 
 &gt;
 &lt;td&gt;Brown Sugar&lt;/td&gt;
 &lt;td&gt;15.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="7.00000000"
 
 &gt;
 &lt;td&gt;Nonfat Milk Powder&lt;/td&gt;
 &lt;td&gt;7.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="5.00000000"
 
 &gt;
 &lt;td&gt;Baking Powder&lt;/td&gt;
 &lt;td&gt;5.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.25000000"
 
 &gt;
 &lt;td&gt;Salt&lt;/td&gt;
 &lt;td&gt;1.25&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.25000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;1.25&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;329.50&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Cobine fat, sugar, salt, spices, milk powder.&lt;/li&gt;
&lt;li&gt;Paddle mix until light.&lt;/li&gt;
&lt;li&gt;Add eggs in 2 to 3 stages, cream well between stages.&lt;/li&gt;
&lt;li&gt;Sift in dry ingredients.&lt;/li&gt;
&lt;li&gt;Stir together liquid until combined.&lt;/li&gt;
&lt;li&gt;Add sifted dry alternately with liquids.&lt;/li&gt;
&lt;li&gt;1/4 dry &amp;ndash; mix until just blended.&lt;/li&gt;
&lt;li&gt;1/3 liquid &amp;ndash; mix until just blended.&lt;/li&gt;
&lt;li&gt;Repeat, scrape, done.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fill tins 2/3 full (250 g at 4 in tins).&lt;/li&gt;
&lt;li&gt;5 min at 400 °F.&lt;/li&gt;
&lt;li&gt;&amp;lt; 30 min at 350 °F.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Dark Espresso Brownie</title><link>https://recipes.uuard.com/docs/recipes/dark_espresso_brownie/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/dark_espresso_brownie/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;All-Purpose Flour&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="flour_all_purpose"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;All-Purpose Flour&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="360.00000000"
 
 &gt;
 &lt;td&gt;Sugar&lt;/td&gt;
 &lt;td&gt;360.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="272.00000000"
 
 &gt;
 &lt;td&gt;Fat&lt;/td&gt;
 &lt;td&gt;272.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="236.00000000"
 
 &gt;
 &lt;td&gt;Egg, Whole&lt;/td&gt;
 &lt;td&gt;236.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="136.00000000"
 
 &gt;
 &lt;td&gt;Dark Chocolate&lt;/td&gt;
 &lt;td&gt;136.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="92.00000000"
 
 &gt;
 &lt;td&gt;Dark Cocoa Powder&lt;/td&gt;
 &lt;td&gt;92.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="44.00000000"
 
 &gt;
 &lt;td&gt;Brown Sugar&lt;/td&gt;
 &lt;td&gt;44.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="12.00000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;12.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="3.20000000"
 
 &gt;
 &lt;td&gt;Salt&lt;/td&gt;
 &lt;td&gt;3.20&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.60000000"
 
 &gt;
 &lt;td&gt;Espresso Powder&lt;/td&gt;
 &lt;td&gt;1.60&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;1256.80&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Combine sugar, brown sugar, salt, egg, vanilla, espresso powder.&lt;/li&gt;
&lt;li&gt;Sift together flour, cocoa powder.&lt;/li&gt;
&lt;li&gt;Melt fat and chocolate.&lt;/li&gt;
&lt;li&gt;Whisk egg mix on high until thick, ≈8 min.&lt;/li&gt;
&lt;li&gt;Add chocolate,oil - mix low.&lt;/li&gt;
&lt;li&gt;Add flour, cocoa - mix low.&lt;/li&gt;
&lt;li&gt;Final mix by hand, folding with spatula.&lt;/li&gt;
&lt;li&gt;Grease 13 in × 9 in × 2 in cake pan, line with parchment.&lt;/li&gt;
&lt;li&gt;Pour in batter, level.&lt;/li&gt;
&lt;li&gt;Bake 30 min at 350 °F.&lt;/li&gt;
&lt;li&gt;Cool.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;1500 g batter / 1 13 × 9.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Hot Fudge V1</title><link>https://recipes.uuard.com/docs/recipes/hot_fudge_v1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/hot_fudge_v1/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Sugar&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="sugar"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Sugar&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="151.00000000"
 
 &gt;
 &lt;td&gt;Semisweet Chocolate&lt;/td&gt;
 &lt;td&gt;151.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="116.00000000"
 
 &gt;
 &lt;td&gt;Heavy Cream&lt;/td&gt;
 &lt;td&gt;116.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="105.00000000"
 
 &gt;
 &lt;td&gt;Corn Syrup, Light&lt;/td&gt;
 &lt;td&gt;105.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="16.00000000"
 
 &gt;
 &lt;td&gt;Shortening&lt;/td&gt;
 &lt;td&gt;16.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.00000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;1.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;489.00&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Combine all except vanilla, chocolate.&lt;/li&gt;
&lt;li&gt;Boil, remove from heat.&lt;/li&gt;
&lt;li&gt;Add chocolate, vanilla.&lt;/li&gt;
&lt;li&gt;Stir.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;</description></item><item><title>Hot Fudge V2</title><link>https://recipes.uuard.com/docs/recipes/hot_fudge_v2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/hot_fudge_v2/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Water&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="water"
 value="29.70"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="29.70000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Water&lt;/td&gt;
 &lt;td&gt;29.70&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="22.00000000"
 
 &gt;
 &lt;td&gt;Oil&lt;/td&gt;
 &lt;td&gt;22.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="15.00000000"
 
 &gt;
 &lt;td&gt;Sugar&lt;/td&gt;
 &lt;td&gt;15.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="12.75000000"
 
 &gt;
 &lt;td&gt;Dark Cocoa Powder&lt;/td&gt;
 &lt;td&gt;12.75&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="10.00000000"
 
 &gt;
 &lt;td&gt;Light Brown Sugar&lt;/td&gt;
 &lt;td&gt;10.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="6.00000000"
 
 &gt;
 &lt;td&gt;Bittersweet Chocolate&lt;/td&gt;
 &lt;td&gt;6.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="3.40000000"
 
 &gt;
 &lt;td&gt;Nonfat Milk Powder&lt;/td&gt;
 &lt;td&gt;3.40&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.50000000"
 
 &gt;
 &lt;td&gt;Liquid Soy Lecithin&lt;/td&gt;
 &lt;td&gt;0.50&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.25000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;0.25&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.15000000"
 
 &gt;
 &lt;td&gt;Salt&lt;/td&gt;
 &lt;td&gt;0.15&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;99.75&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Combine all except vanilla, chocolate, cocoa.&lt;/li&gt;
&lt;li&gt;Boil, remove from heat.&lt;/li&gt;
&lt;li&gt;Add chocolate, vanilla.&lt;/li&gt;
&lt;li&gt;Stir.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;</description></item><item><title>Oat Chocolate Cookie</title><link>https://recipes.uuard.com/docs/recipes/oat_chocolate_cookie/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/oat_chocolate_cookie/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Oats&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="oats"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Oats&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="118.00000000"
 
 &gt;
 &lt;td&gt;Sugar&lt;/td&gt;
 &lt;td&gt;118.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="66.00000000"
 
 &gt;
 &lt;td&gt;Peanut Butter&lt;/td&gt;
 &lt;td&gt;66.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="45.00000000"
 
 &gt;
 &lt;td&gt;Milk&lt;/td&gt;
 &lt;td&gt;45.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="22.00000000"
 
 &gt;
 &lt;td&gt;Butter&lt;/td&gt;
 &lt;td&gt;22.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="8.50000000"
 
 &gt;
 &lt;td&gt;Cocoa Powder&lt;/td&gt;
 &lt;td&gt;8.50&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="6.00000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;6.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.00000000"
 
 &gt;
 &lt;td&gt;Salt&lt;/td&gt;
 &lt;td&gt;1.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;366.50&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Combine the butter, sugar, milk, and cocoa powder together in a medium saucepan over medium heat.&lt;/li&gt;
&lt;li&gt;Whisk constantly until the butter melts. whisking occasionally, bring to a boil.&lt;/li&gt;
&lt;li&gt;Once boiling, stop whisking and allow to boil for 1 min.&lt;/li&gt;
&lt;li&gt;Remove from heat, then immediately stir in the peanut butter and vanilla extract until completely combined.&lt;/li&gt;
&lt;li&gt;Stir in the oats and salt.&lt;/li&gt;
&lt;li&gt;Allow mixture to sit for 5 min. This allows the oats to soak up some moisture.&lt;/li&gt;
&lt;li&gt;During the 5 min, line two baking sheets with parchment paper or silicone baking mats. and make sure there is enough room in your refrigerator for the baking sheets.&lt;/li&gt;
&lt;li&gt;Using a 1 tbsp cookie scoop, drop a tablespoon of dough onto the lined baking sheets. if desired, slightly flatten down with the back of a spoon. repeat with the rest of the dough.&lt;/li&gt;
&lt;li&gt;Refrigerate the cookies for 30-60 min to set.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;</description></item><item><title>Pumpkin Ganache</title><link>https://recipes.uuard.com/docs/recipes/pumpkin_ganache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/pumpkin_ganache/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Pumpkin Puree&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="pumpkin_puree"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Pumpkin Puree&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="54.00000000"
 
 &gt;
 &lt;td&gt;White Chocolate&lt;/td&gt;
 &lt;td&gt;54.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="27.50000000"
 
 &gt;
 &lt;td&gt;Heavy Cream&lt;/td&gt;
 &lt;td&gt;27.50&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="15.70000000"
 
 &gt;
 &lt;td&gt;Glucose&lt;/td&gt;
 &lt;td&gt;15.70&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="8.63000000"
 
 &gt;
 &lt;td&gt;Butter&lt;/td&gt;
 &lt;td&gt;8.63&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.55000000"
 
 &gt;
 &lt;td&gt;Cinnamon&lt;/td&gt;
 &lt;td&gt;0.55&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.45000000"
 
 &gt;
 &lt;td&gt;Kosher Salt&lt;/td&gt;
 &lt;td&gt;0.45&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.30000000"
 
 &gt;
 &lt;td&gt;Cardamom&lt;/td&gt;
 &lt;td&gt;0.30&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.12000000"
 
 &gt;
 &lt;td&gt;Allspice&lt;/td&gt;
 &lt;td&gt;0.12&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.12000000"
 
 &gt;
 &lt;td&gt;Ginger&lt;/td&gt;
 &lt;td&gt;0.12&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.02000000"
 
 &gt;
 &lt;td&gt;Clove&lt;/td&gt;
 &lt;td&gt;0.02&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;207.39&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Spread pumpkin over parchment-lined half size baking sheet.&lt;/li&gt;
&lt;li&gt;Roast 1 hr at 325 °F until pumpkin reduced by 40%.&lt;/li&gt;
&lt;li&gt;Add chocolate chips to a mixing bowl.&lt;/li&gt;
&lt;li&gt;Combine cream, glucose, butter in pot.&lt;/li&gt;
&lt;li&gt;Bring to the boil.&lt;/li&gt;
&lt;li&gt;Pour over white chocolate.&lt;/li&gt;
&lt;li&gt;Let sit for 1 min.&lt;/li&gt;
&lt;li&gt;Add roasted pumpkin, spices, salt to mixture.&lt;/li&gt;
&lt;li&gt;Stir, immersion blend until totally smooth.&lt;/li&gt;
&lt;li&gt;Pour into shells warm.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;29 oz can = 822.136 g&lt;/li&gt;
&lt;li&gt;822 g -&amp;gt; 500 g ≈40% reduction&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Puppy Chow</title><link>https://recipes.uuard.com/docs/recipes/puppy_chow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/puppy_chow/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Rice Chex&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="rice_chex"
 value="100.00"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="100.00000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Rice Chex&lt;/td&gt;
 &lt;td&gt;100.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="200.00000000"
 
 &gt;
 &lt;td&gt;Confectioners&amp;#39; Sugar&lt;/td&gt;
 &lt;td&gt;200.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="150.00000000"
 
 &gt;
 &lt;td&gt;Semisweet Chocolate Chips&lt;/td&gt;
 &lt;td&gt;150.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="85.00000000"
 
 &gt;
 &lt;td&gt;Peanut Butter&lt;/td&gt;
 &lt;td&gt;85.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="25.00000000"
 
 &gt;
 &lt;td&gt;Oil&lt;/td&gt;
 &lt;td&gt;25.00&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="1.75000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;1.75&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.50000000"
 
 &gt;
 &lt;td&gt;Salt&lt;/td&gt;
 &lt;td&gt;0.50&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;562.25&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Set aside rice chex.&lt;/li&gt;
&lt;li&gt;Add peanut butter, chocolate, fat, salt to pan.&lt;/li&gt;
&lt;li&gt;Heat until melted and smooth.&lt;/li&gt;
&lt;li&gt;Pour melted mixture over cereal.&lt;/li&gt;
&lt;li&gt;Mix / fold until coated evenly.&lt;/li&gt;
&lt;li&gt;Add powdered sugar to plastic bag.&lt;/li&gt;
&lt;li&gt;Add coated cereal to bag.&lt;/li&gt;
&lt;li&gt;Mix in bag to coat.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;</description></item><item><title>Top Pot Chocolate Icing</title><link>https://recipes.uuard.com/docs/recipes/top_pot_chocolate_icing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://recipes.uuard.com/docs/recipes/top_pot_chocolate_icing/</guid><description>&lt;h2 id="ingredients"&gt;
 Ingredients
 
 &lt;a class="anchor" href="#ingredients"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;div
 id="recipe-formula-0"
 class="recipe-formula-widget"
 data-basis-mode="single"
 &gt;&lt;div class="basis-inputs" aria-label="Basis ingredient weight"&gt;&lt;label&gt;
 &lt;span&gt;Confectioners&amp;#39; Sugar&lt;/span&gt;
 &lt;span class="basis-input-field"&gt;
 &lt;input
 type="number"
 min="0"
 step="0.01"
 inputmode="decimal"
 data-basis-input="true"
 data-ingredient-id="confectioners_sugar"
 value="57.27"
 &gt;
 &lt;span class="basis-input-unit"&gt;g&lt;/span&gt;
 &lt;/span&gt;
 &lt;/label&gt;&lt;/div&gt;&lt;table class="bakers-percent-table"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Ingredient&lt;/th&gt;
 &lt;th&gt;Baker's %&lt;/th&gt;
 &lt;th&gt;Weight (g)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;&lt;tr
 data-row-pct="57.27000000"
 data-is-basis="true"
 &gt;
 &lt;td&gt;Confectioners&amp;#39; Sugar&lt;/td&gt;
 &lt;td&gt;57.27&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="20.60000000"
 
 &gt;
 &lt;td&gt;Chocolate Chip&lt;/td&gt;
 &lt;td&gt;20.60&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="16.04000000"
 
 &gt;
 &lt;td&gt;Water&lt;/td&gt;
 &lt;td&gt;16.04&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="2.86000000"
 
 &gt;
 &lt;td&gt;Sugar&lt;/td&gt;
 &lt;td&gt;2.86&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="2.18000000"
 
 &gt;
 &lt;td&gt;Corn Syrup&lt;/td&gt;
 &lt;td&gt;2.18&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.40000000"
 
 &gt;
 &lt;td&gt;Salt&lt;/td&gt;
 &lt;td&gt;0.40&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.36000000"
 
 &gt;
 &lt;td&gt;Vanilla Extract&lt;/td&gt;
 &lt;td&gt;0.36&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;tr
 data-row-pct="0.29000000"
 
 &gt;
 &lt;td&gt;Agar&lt;/td&gt;
 &lt;td&gt;0.29&lt;/td&gt;
 &lt;td data-weight-cell&gt;0.00&lt;/td&gt;
 &lt;/tr&gt;&lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;th&gt;Total&lt;/th&gt;
 &lt;th&gt;100.00&lt;/th&gt;
 &lt;th data-total-weight&gt;0.00&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
 &lt;/table&gt;
 &lt;/div&gt;

 &lt;script&gt;
 (() =&gt; {
 const root = document.getElementById("recipe-formula-0");
 if (!root) return;

 const basisInputs = root.querySelectorAll('input[data-basis-input="true"]');
 const rows = root.querySelectorAll("tr[data-row-pct]");
 const basisTotalEl = root.querySelector("[data-basis-total]");
 const basisTotalInput = root.querySelector('input[data-basis-total-input="true"]');
 const totalWeightEl = root.querySelector("[data-total-weight]");
 const basisMode = root.getAttribute("data-basis-mode");

 const parseNum = (value) =&gt; {
 const n = Number.parseFloat(value);
 return Number.isFinite(n) ? n : 0;
 };

 const update = () =&gt; {
 let basisTotal = 0;
 let totalWeight = 0;
 if (basisMode === "multi") {
 basisTotal = parseNum(basisTotalInput ? basisTotalInput.value : 0);
 } else {
 basisInputs.forEach((input) =&gt; {
 basisTotal += parseNum(input.value);
 });
 }

 if (basisTotalEl) {
 basisTotalEl.textContent = basisTotal.toFixed(2);
 }

 rows.forEach((row) =&gt; {
 const pct = parseNum(row.getAttribute("data-row-pct"));
 const weight = (pct / 100) * basisTotal;
 totalWeight += weight;
 const cell = row.querySelector("[data-weight-cell]");
 if (cell) cell.textContent = weight.toFixed(2);
 });

 if (totalWeightEl) {
 totalWeightEl.textContent = totalWeight.toFixed(2);
 }
 };

 if (basisMode === "multi") {
 if (basisTotalInput) {
 basisTotalInput.addEventListener("input", update);
 }
 } else {
 basisInputs.forEach((input) =&gt; input.addEventListener("input", update));
 }
 update();
 })();
 &lt;/script&gt;

 &lt;style&gt;
 .recipe-formula-widget .basis-inputs {
 margin: 0 0 0.75rem;
 display: grid;
 gap: 0.375rem;
 max-width: 28rem;
 }

 .recipe-formula-widget .basis-inputs label {
 display: inline-flex;
 align-items: center;
 gap: 0.75rem;
 color: var(--color-link);
 font-weight: 600;
 justify-self: start;
 }

 .recipe-formula-widget .basis-input-field {
 display: inline-flex;
 align-items: center;
 gap: 0.25rem;
 white-space: nowrap;
 }

 .recipe-formula-widget .basis-inputs input {
 width: 7rem;
 margin: 0;
 }

 .recipe-formula-widget .basis-input-unit {
 color: #6b7280;
 font-size: 0.875em;
 }

 .recipe-formula-widget table.bakers-percent-table tbody tr[data-is-basis="true"] td {
 font-weight: 600;
 color: var(--color-link);
 }
 &lt;/style&gt;
&lt;h2 id="process"&gt;
 Process
 
 &lt;a class="anchor" href="#process"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;h2 id="notes"&gt;
 Notes
 
 &lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Approximate yield is 100 g.&lt;/li&gt;
&lt;li&gt;600 g makes 12 donuts.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>