{"items":[{"id":"1TOxM5OgjxCl65Rcp1xI","notes":"Ingredients (4 servings)\n1.5 lb chicken breast\n2 cups cooked white or jasmine rice\n3 cups broccoli\n2 tbsp olive oil\nJuice of 1 lemon\nGarlic powder, salt, pepper\nHow to make\nSeason chicken with garlic, salt, pepper, lemon juice + olive oil\nBake at 400°F for ~20–25 min or pan cook\nSteam or roast broccoli (salt + olive oil)\nCook rice (or use your pre-cooked rice)","linkedProjectId":"","createdAt":{"_seconds":1774539217,"_nanoseconds":33000000},"category":"Testing","fiber":"","published":true,"sodium":"","cholesterol":"","nextAvailableDate":"","sugar":"","photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2F1TOxM5OgjxCl65Rcp1xI%2F1774727874852_Lemon-Rosemary-Chicken-57.webp?alt=media&token=54870faf-b875-4042-9c06-bbe396008792","carbs":"10","protein":"40","fat":"10","calories":"500","menuIngredients":"chicken, rice, lemons, garlic","availableThisWeek":true,"servingSize":"1 Meal","satFat":"10","packOptions":[],"weeklySpecial":false,"hideCalories":false,"name":"Lemon Honey Chicken","fanFavorite":false,"mealType":"Entrée","menuCategory":"Entrée","skuBase":"TDC-0009","owner":"omar","sortOrder":0,"menuPrice":"11","menuDescription":"dry-brined for 24 hours so every bite is seasoned all the way through. butterflied and pounded to an even thickness so every piece cooks identically, no dry edges, no undercooked center. roasted until golden, glazed with honey and lemon right at the end, then rested to lock every drop of moisture in. finished with a bright lemon squeeze and a rich pan sauce from the real drippings. fresh every week, and  even better the next day.​​​​​​​​​​​​​​​​","nutritionTags":[],"createdByName":"Omar Yusuf","photos":[],"instructionsHtml":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Tandoco — Lemon Garlic Chicken</title>\n<link href=\"https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300;0,9..144,400;0,9..144,500;1,9..144,300;1,9..144,400&family=Outfit:wght@300;400;500;600&display=swap\" rel=\"stylesheet\">\n<style>\n  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n  :root {\n    --navy: #1B1A6B;\n    --blue-mid: #2D2FA8;\n    --blue-light: #4F51D4;\n    --blue-pale: #C8C9F5;\n    --cream: #FAF8F3;\n    --gold: #C8A96E;\n    --terra: #C87555;\n    --ink: #1a1a1a;\n    --muted: #666;\n    --border: rgba(0,0,0,0.08);\n  }\n\n  body {\n    font-family: 'Outfit', sans-serif;\n    background: var(--cream);\n    color: var(--ink);\n    min-height: 100vh;\n  }\n\n  /* ── Hero ── */\n  .hero {\n    background: var(--navy);\n    padding: 3.5rem 2rem 0;\n    text-align: center;\n    position: relative;\n    overflow: hidden;\n  }\n  .hero::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background:\n      radial-gradient(ellipse 60% 50% at 20% 80%, rgba(79,81,212,0.35) 0%, transparent 70%),\n      radial-gradient(ellipse 50% 60% at 80% 20%, rgba(200,169,110,0.2) 0%, transparent 70%);\n    pointer-events: none;\n  }\n  .hero-eyebrow {\n    font-family: 'Outfit', sans-serif;\n    font-size: 11px;\n    font-weight: 500;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: var(--gold);\n    margin-bottom: 1rem;\n    position: relative;\n  }\n  .hero-title {\n    font-family: 'Fraunces', serif;\n    font-size: clamp(2.6rem, 7vw, 4.5rem);\n    font-weight: 400;\n    color: #fff;\n    line-height: 1.05;\n    margin-bottom: 0.5rem;\n    position: relative;\n  }\n  .hero-title em {\n    font-style: italic;\n    color: var(--blue-pale);\n  }\n  .hero-sub {\n    font-size: 14px;\n    color: rgba(255,255,255,0.55);\n    margin-bottom: 2.5rem;\n    position: relative;\n  }\n  .hero-tags {\n    display: flex;\n    justify-content: center;\n    gap: 8px;\n    flex-wrap: wrap;\n    margin-bottom: 2.5rem;\n    position: relative;\n  }\n  .tag {\n    font-size: 11px;\n    font-weight: 500;\n    letter-spacing: 0.06em;\n    padding: 5px 12px;\n    border-radius: 100px;\n    border: 1px solid rgba(255,255,255,0.15);\n    color: rgba(255,255,255,0.7);\n    background: rgba(255,255,255,0.06);\n  }\n  .hero-divider {\n    width: 100%;\n    height: 48px;\n    background: var(--cream);\n    border-radius: 48px 48px 0 0;\n    position: relative;\n    z-index: 1;\n  }\n\n  /* ── Layout ── */\n  .wrap { max-width: 720px; margin: 0 auto; padding: 0 1.5rem 4rem; }\n\n  /* ── Section header ── */\n  .section-head {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin: 2.5rem 0 1.25rem;\n  }\n  .section-num {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    background: var(--navy);\n    color: #fff;\n    font-size: 13px;\n    font-weight: 600;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n  }\n  .section-title {\n    font-family: 'Fraunces', serif;\n    font-size: 1.35rem;\n    font-weight: 400;\n    color: var(--navy);\n  }\n  .section-sub {\n    font-size: 12.5px;\n    color: var(--muted);\n    margin-left: auto;\n    white-space: nowrap;\n  }\n\n  /* ── Timing bar ── */\n  .timing-bar {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 1px;\n    background: var(--border);\n    border-radius: 12px;\n    overflow: hidden;\n    border: 1px solid var(--border);\n    margin: 2rem 0;\n  }\n  .timing-item {\n    background: #fff;\n    padding: 1rem;\n    text-align: center;\n  }\n  .timing-val {\n    font-family: 'Fraunces', serif;\n    font-size: 1.6rem;\n    font-weight: 400;\n    color: var(--navy);\n    line-height: 1;\n    margin-bottom: 4px;\n  }\n  .timing-label { font-size: 11px; color: var(--muted); letter-spacing: 0.06em; text-transform: uppercase; }\n\n  /* ── Cards ── */\n  .card {\n    background: #fff;\n    border-radius: 14px;\n    border: 1px solid var(--border);\n    overflow: hidden;\n    margin-bottom: 1rem;\n  }\n  .card-header {\n    padding: 1rem 1.25rem;\n    background: #f7f5f0;\n    border-bottom: 1px solid var(--border);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n  }\n  .card-header-title {\n    font-size: 12px;\n    font-weight: 600;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: var(--navy);\n  }\n  .card-header-note {\n    font-size: 11.5px;\n    color: var(--gold);\n    font-weight: 500;\n  }\n  .card-body { padding: 1.25rem; }\n\n  /* ── Ingredients ── */\n  .ingredient-list { list-style: none; display: flex; flex-direction: column; gap: 10px; }\n  .ingredient {\n    display: flex;\n    align-items: baseline;\n    gap: 10px;\n    font-size: 14px;\n    line-height: 1.4;\n  }\n  .ing-amount {\n    font-weight: 600;\n    color: var(--navy);\n    min-width: 80px;\n    text-align: right;\n    flex-shrink: 0;\n    font-size: 13px;\n  }\n  .ing-name { color: var(--ink); }\n  .ing-note { font-size: 12px; color: var(--muted); margin-left: 4px; }\n  .ing-divider {\n    height: 1px;\n    background: var(--border);\n    margin: 6px 0 6px 90px;\n  }\n  .ing-group-label {\n    font-size: 10.5px;\n    font-weight: 600;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--muted);\n    padding: 8px 0 4px 90px;\n  }\n\n  /* ── Steps ── */\n  .steps { display: flex; flex-direction: column; gap: 0; }\n  .step {\n    display: flex;\n    gap: 16px;\n    padding: 1.25rem 1.25rem;\n    border-bottom: 1px solid var(--border);\n    position: relative;\n  }\n  .step:last-child { border-bottom: none; }\n  .step-left { display: flex; flex-direction: column; align-items: center; gap: 0; flex-shrink: 0; }\n  .step-dot {\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    background: var(--navy);\n    color: #fff;\n    font-size: 12px;\n    font-weight: 600;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n  }\n  .step-line {\n    width: 1.5px;\n    flex: 1;\n    background: var(--border);\n    margin-top: 6px;\n    min-height: 20px;\n  }\n  .step-content { flex: 1; padding-top: 2px; }\n  .step-title {\n    font-family: 'Fraunces', serif;\n    font-size: 1rem;\n    font-weight: 400;\n    color: var(--navy);\n    margin-bottom: 6px;\n  }\n  .step-body {\n    font-size: 14px;\n    color: var(--ink);\n    line-height: 1.65;\n  }\n  .step-body strong { font-weight: 600; }\n  .step-callout {\n    margin-top: 10px;\n    padding: 10px 14px;\n    background: #EEF0FF;\n    border-radius: 8px;\n    border-left: 3px solid var(--navy);\n    font-size: 13px;\n    color: var(--navy);\n    line-height: 1.5;\n  }\n  .step-callout.gold {\n    background: #FFF8EC;\n    border-left-color: var(--gold);\n    color: #7A5C1E;\n  }\n  .step-callout.terra {\n    background: #FFF2EE;\n    border-left-color: var(--terra);\n    color: #7A3520;\n  }\n  .step-timing {\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    font-size: 11px;\n    font-weight: 500;\n    color: var(--muted);\n    background: #f5f3ee;\n    padding: 3px 10px;\n    border-radius: 100px;\n    margin-top: 8px;\n  }\n  .step-timing svg { width: 11px; height: 11px; }\n\n  /* ── Temp target ── */\n  .temp-target {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n    background: var(--navy);\n    border-radius: 12px;\n    padding: 1.25rem 1.5rem;\n    margin: 1.5rem 0;\n    color: #fff;\n  }\n  .temp-val {\n    font-family: 'Fraunces', serif;\n    font-size: 2.5rem;\n    font-weight: 400;\n    color: var(--blue-pale);\n    line-height: 1;\n    flex-shrink: 0;\n  }\n  .temp-text { font-size: 13.5px; line-height: 1.55; color: rgba(255,255,255,0.8); }\n  .temp-text strong { color: #fff; }\n\n  /* ── Science aside ── */\n  .science-box {\n    border: 1px solid var(--blue-pale);\n    background: #F4F4FD;\n    border-radius: 12px;\n    padding: 1.25rem;\n    margin: 1rem 0;\n  }\n  .science-label {\n    font-size: 10.5px;\n    font-weight: 600;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--blue-light);\n    margin-bottom: 6px;\n  }\n  .science-text { font-size: 13px; color: #444; line-height: 1.6; }\n\n  /* ── Flavor profiles ── */\n  .profiles-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n    margin-top: 1rem;\n  }\n  .profile-card {\n    background: #fff;\n    border: 1px solid var(--border);\n    border-radius: 10px;\n    padding: 1rem;\n  }\n  .profile-name { font-size: 13.5px; font-weight: 600; color: var(--ink); margin-bottom: 4px; }\n  .profile-note { font-size: 12px; color: var(--muted); line-height: 1.5; }\n\n  /* ── Footer note ── */\n  .footer-note {\n    margin-top: 2.5rem;\n    padding: 1.5rem;\n    background: var(--navy);\n    border-radius: 14px;\n    color: rgba(255,255,255,0.75);\n    font-size: 13px;\n    line-height: 1.65;\n    text-align: center;\n  }\n  .footer-note strong { color: #fff; }\n  .tandoco-logo {\n    font-family: 'Fraunces', serif;\n    font-size: 1.1rem;\n    color: var(--blue-pale);\n    font-style: italic;\n    font-weight: 300;\n    display: block;\n    margin-bottom: 8px;\n  }\n\n  @media (max-width: 540px) {\n    .timing-bar { grid-template-columns: repeat(3, 1fr); }\n    .profiles-grid { grid-template-columns: 1fr; }\n    .ing-amount { min-width: 70px; }\n  }\n</style>\n</head>\n<body>\n\n<div class=\"hero\">\n  <p class=\"hero-eyebrow\">tandoco recipe guide</p>\n  <h1 class=\"hero-title\">Lemon <em>Garlic</em><br>Chicken</h1>\n  <p class=\"hero-sub\">10 servings · high-protein meal prep</p>\n  <div class=\"hero-tags\">\n    <span class=\"tag\">50g+ protein</span>\n    <span class=\"tag\">dry brine method</span>\n    <span class=\"tag\">convection roast</span>\n    <span class=\"tag\">batch-optimized</span>\n  </div>\n  <div class=\"hero-divider\"></div>\n</div>\n\n<div class=\"wrap\">\n\n  <div class=\"timing-bar\">\n    <div class=\"timing-item\">\n      <div class=\"timing-val\">15<span style=\"font-size:1rem\">m</span></div>\n      <div class=\"timing-label\">Day-Before Prep</div>\n    </div>\n    <div class=\"timing-item\">\n      <div class=\"timing-val\">12–24<span style=\"font-size:1rem\">h</span></div>\n      <div class=\"timing-label\">Brine Time</div>\n    </div>\n    <div class=\"timing-item\">\n      <div class=\"timing-val\">45<span style=\"font-size:1rem\">m</span></div>\n      <div class=\"timing-label\">Cook Day Active</div>\n    </div>\n  </div>\n\n  <!-- ══ WEIGHT CALCULATOR ══ -->\n  <div class=\"card\" style=\"margin-bottom:2rem;\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Batch Calculator</span>\n      <span class=\"card-header-note\">enter your batch details</span>\n    </div>\n    <div class=\"card-body\">\n\n      <!-- Row 1: Weight input -->\n      <div style=\"margin-bottom:12px;\">\n        <div style=\"font-size:11px; font-weight:600; letter-spacing:0.08em; text-transform:uppercase; color:var(--muted); margin-bottom:8px;\">Raw chicken weight</div>\n        <div style=\"display:flex; align-items:center; gap:12px; flex-wrap:wrap;\">\n          <div style=\"position:relative; flex:1; min-width:180px;\">\n            <input id=\"meatWeight\" type=\"number\" min=\"100\" max=\"10000\" placeholder=\"e.g. 1590\"\n              style=\"width:100%; padding:10px 48px 10px 14px; border-radius:8px; border:1.5px solid var(--blue-pale); background:#fff; font-size:16px; font-family:'Outfit',sans-serif; color:var(--ink); outline:none;\"\n              oninput=\"calcIngredients()\" onfocus=\"this.style.borderColor='var(--navy)'\" onblur=\"this.style.borderColor='var(--blue-pale)'\">\n            <span style=\"position:absolute; right:14px; top:50%; transform:translateY(-50%); font-size:12px; color:var(--muted); pointer-events:none;\">g</span>\n          </div>\n          <div style=\"display:flex; gap:8px;\">\n            <button onclick=\"setUnit('g')\" id=\"btnG\" style=\"padding:8px 16px; border-radius:8px; border:1.5px solid var(--navy); background:var(--navy); color:#fff; font-size:13px; font-family:'Outfit',sans-serif; font-weight:500; cursor:pointer;\">grams</button>\n            <button onclick=\"setUnit('lbs')\" id=\"btnLbs\" style=\"padding:8px 16px; border-radius:8px; border:1.5px solid var(--border); background:#fff; color:var(--ink); font-size:13px; font-family:'Outfit',sans-serif; font-weight:500; cursor:pointer;\">lbs</button>\n          </div>\n        </div>\n      </div>\n\n      <!-- Row 2: Protein goal -->\n      <div style=\"margin-bottom:16px;\">\n        <div style=\"font-size:11px; font-weight:600; letter-spacing:0.08em; text-transform:uppercase; color:var(--muted); margin-bottom:8px;\">Protein goal per serving</div>\n        <div style=\"display:flex; align-items:center; gap:10px; flex-wrap:wrap;\">\n          <div style=\"position:relative; width:140px;\">\n            <input id=\"proteinGoal\" type=\"number\" min=\"20\" max=\"100\" value=\"50\"\n              style=\"width:100%; padding:10px 40px 10px 14px; border-radius:8px; border:1.5px solid var(--blue-pale); background:#fff; font-size:16px; font-family:'Outfit',sans-serif; color:var(--ink); outline:none;\"\n              oninput=\"calcIngredients()\" onfocus=\"this.style.borderColor='var(--navy)'\" onblur=\"this.style.borderColor='var(--blue-pale)'\">\n            <span style=\"position:absolute; right:14px; top:50%; transform:translateY(-50%); font-size:12px; color:var(--muted); pointer-events:none;\">g</span>\n          </div>\n          <div style=\"display:flex; gap:8px; flex-wrap:wrap;\">\n            <button onclick=\"setProteinGoal(40)\" class=\"protein-preset\" id=\"pp40\" style=\"padding:6px 12px; border-radius:8px; border:1.5px solid var(--border); background:#fff; color:var(--ink); font-size:12px; font-family:'Outfit',sans-serif; font-weight:500; cursor:pointer;\">40g</button>\n            <button onclick=\"setProteinGoal(50)\" class=\"protein-preset\" id=\"pp50\" style=\"padding:6px 12px; border-radius:8px; border:1.5px solid var(--navy); background:var(--navy); color:#fff; font-size:12px; font-family:'Outfit',sans-serif; font-weight:500; cursor:pointer;\">50g</button>\n            <button onclick=\"setProteinGoal(60)\" class=\"protein-preset\" id=\"pp60\" style=\"padding:6px 12px; border-radius:8px; border:1.5px solid var(--border); background:#fff; color:var(--ink); font-size:12px; font-family:'Outfit',sans-serif; font-weight:500; cursor:pointer;\">60g</button>\n          </div>\n        </div>\n      </div>\n\n      <!-- Serving output -->\n      <div id=\"servingResult\" style=\"display:none; background:#EEF0FF; border-radius:10px; padding:1.25rem; margin-bottom:1.25rem; border:1px solid var(--blue-pale);\">\n        <div style=\"font-size:11px; font-weight:600; letter-spacing:0.08em; text-transform:uppercase; color:var(--blue-light); margin-bottom:12px;\">Serving recommendation</div>\n        <div style=\"display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-bottom:12px;\">\n          <div style=\"background:#fff; border-radius:8px; padding:10px; text-align:center;\">\n            <div style=\"font-family:'Fraunces',serif; font-size:1.6rem; color:var(--navy); line-height:1;\" id=\"portionCount\">—</div>\n            <div style=\"font-size:10px; color:var(--muted); text-transform:uppercase; letter-spacing:0.06em; margin-top:4px;\">portions</div>\n          </div>\n          <div style=\"background:#fff; border-radius:8px; padding:10px; text-align:center;\">\n            <div style=\"font-family:'Fraunces',serif; font-size:1.6rem; color:var(--navy); line-height:1;\" id=\"rawPerPortion\">—</div>\n            <div style=\"font-size:10px; color:var(--muted); text-transform:uppercase; letter-spacing:0.06em; margin-top:4px;\">g raw / portion</div>\n          </div>\n          <div style=\"background:#fff; border-radius:8px; padding:10px; text-align:center;\">\n            <div style=\"font-family:'Fraunces',serif; font-size:1.6rem; color:var(--navy); line-height:1;\" id=\"proteinPerPortion\">—</div>\n            <div style=\"font-size:10px; color:var(--muted); text-transform:uppercase; letter-spacing:0.06em; margin-top:4px;\">g protein / portion</div>\n          </div>\n        </div>\n        <div id=\"servingNote\" style=\"font-size:12px; color:#3a3a8a; line-height:1.55;\"></div>\n      </div>\n\n      <!-- Ingredients grid -->\n      <div id=\"calcResult\" style=\"display:none; margin-top:1.25rem;\">\n        <div style=\"font-size:11px; font-weight:600; letter-spacing:0.08em; text-transform:uppercase; color:var(--muted); margin-bottom:10px;\">Scaled ingredients</div>\n        <div style=\"display:grid; grid-template-columns:1fr 1fr; gap:8px;\" id=\"calcGrid\"></div>\n        <div style=\"margin-top:10px; font-size:12px; color:var(--muted);\">All ingredient amounts below update automatically.</div>\n      </div>\n\n    </div>\n  </div>\n\n  <!-- ══ PHASE 0: PREP ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">1</div>\n    <h2 class=\"section-title\">Prep the Chicken</h2>\n    <span class=\"section-sub\">before anything else</span>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">If starting from frozen — thaw in the fridge</div>\n          <div class=\"step-body\">Move frozen chicken from the freezer to the fridge <strong>24 hours before brine day</strong>. It thaws slowly at a safe temperature the whole time and arrives cold and ready to prep. This is the only method that fits the Tandoco workflow — it adds zero active time and slots naturally into the night-before routine. <strong>Never thaw on the counter or in hot water</strong> — the outer surface enters the danger zone (40–140°F) while the center is still frozen. If you're short on time, submerge the sealed bag in cold water, changing the water every 30 minutes — a full batch takes 2–3 hours and must go straight to brining after, no refreezing.</div>\n          <div class=\"step-callout gold\">If starting fresh (never frozen), skip this step entirely.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Do not rinse</div>\n          <div class=\"step-body\">Take the chicken straight from the package — <strong>do not rinse it under water.</strong> Rinsing spreads bacteria to your sink, counter, and surrounding surfaces via water splatter. It does nothing to make the chicken safer. This is non-negotiable per USDA/FDA food safety guidance.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">3</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Pat completely dry</div>\n          <div class=\"step-body\">Use paper towels to pat every surface of each breast <strong>completely dry</strong> — top, bottom, and sides. Surface moisture is the enemy of browning. Wet chicken steams in the oven instead of roasting, and the dry brine can't adhere properly to a wet surface. Don't rush this step — thorough drying makes a visible difference in the final crust.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">4</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Trim excess fat and tendons</div>\n          <div class=\"step-body\">Remove any large pockets of fat or dangling tendons with kitchen shears or a sharp knife. Small fat deposits are fine — they render during cooking. You're just cleaning up anything that would cook unevenly or affect the texture of a meal-prep portion.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">5</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Check your workspace</div>\n          <div class=\"step-body\">Raw chicken contaminates every surface it touches. Keep a dedicated cutting board for raw protein. Wash hands thoroughly after handling. Have your sheet pans, wire racks, scale, and salt ready to go before you start — you want to move from prep straight to brining without stopping to find equipment.</div>\n          <div class=\"step-callout gold\">For Tandoco production batches: set up a raw side and a clean side of your workspace before you start. Never let raw chicken come into contact with equipment or surfaces that will touch cooked food.</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- ══ PHASE 1: DRY BRINE ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">3</div>\n    <h2 class=\"section-title\">Day Before — Dry Brine</h2>\n    <span class=\"section-sub\">15 min active</span>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Ingredients</span>\n      <span class=\"card-header-note\">per 10 breasts (~5–6 lbs)</span>\n    </div>\n    <div class=\"card-body\">\n      <ul class=\"ingredient-list\">\n        <li class=\"ingredient\">\n          <span class=\"ing-amount\" id=\"saltAmt\">35–40g</span>\n          <span class=\"ing-name\">Diamond Crystal kosher salt <span class=\"ing-note\" id=\"saltNote\">~3 tbsp + 1 tsp</span></span>\n        </li>\n        <li class=\"ingredient\">\n          <span class=\"ing-amount\">10</span>\n          <span class=\"ing-name\">chicken breasts <span class=\"ing-note\">~8–10 oz each</span></span>\n        </li>\n      </ul>\n    </div>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Steps</span>\n    </div>\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Butterfly large breasts, then pound to uniform thickness</div>\n          <div class=\"step-body\">For any breast over <strong>8–10oz</strong> (most large breasts), butterfly first — use a sharp knife to cut horizontally through the center of the breast, stopping just before you cut all the way through, then open it flat like a book. This halves the thickness mechanically before you ever pick up the mallet, so you're doing a light finishing pound rather than a full breakdown. <strong>Keep your cut centered</strong> — an off-center butterfly gives you one thick half and one thin half, which defeats the purpose. Then using the <strong>flat side</strong> of a meat mallet (not the spiked side), lightly pound each half to <strong>¾-inch even thickness</strong>. For smaller breasts (under 8oz), skip the butterfly and pound directly.</div>\n          <div class=\"step-callout\">Butterflying large breasts also improves portioning — you can separate the two halves into individual portions for more consistent serving sizes across the batch. Note: butterflied breasts lay wider and flatter, so you'll fit fewer per pan — plan on <strong>two sheet pans</strong> for most batches. This also means two wire racks. The tradeoff is worth it: cook time drops and doneness becomes consistent across the entire batch.</div>\n          <div class=\"step-callout gold\"><strong>Short on time?</strong> Skip the pre-chill — take the chicken straight from the fridge and pound immediately. Chilling first helps fibers resist tearing, but at small batch sizes the difference is minimal. What you can't skip is the pounding itself.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Weigh and calculate your salt</div>\n          <div class=\"step-body\">Place all breasts on the scale together and note the <strong>total raw weight in grams</strong>. Multiply by <strong>0.015</strong> — that's your exact salt amount. Weigh that salt into a small bowl. This takes 30 seconds and eliminates all guesswork.</div>\n          <div class=\"step-callout\">Example: 10 breasts at 1,400g total → 1,400 × 0.015 = <strong>21g salt</strong>. Always weigh, never eyeball — over-salting is the most common dry brine mistake.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">3</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Apply dry brine</div>\n          <div class=\"step-body\">Lay each breast flat on the rack. Pinch-sprinkle the salt from <strong>6–8 inches above</strong> the breast — the height disperses the salt as it falls for more even coverage than dumping from close up. Season both sides, dividing your bowl of salt roughly equally across all breasts. Don't rush this — even coverage matters.</div>\n          <div class=\"step-callout gold\">⚑ Do not rinse the chicken at any point. No exceptions. Rinsing spreads bacteria to your sink, counter, and hands (USDA/FDA guidance). The dry brine does the work — no washing needed.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">4</div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Refrigerate uncovered overnight</div>\n          <div class=\"step-body\">Arrange breasts on <strong>wire racks over sheet pans</strong>. Leave uncovered. Refrigerate for <strong>12–24 hours</strong> — overnight is optimal; 1 hour is the minimum. The three-phase process: salt draws moisture out → dissolves into a natural brine → reabsorbs deep into the meat overnight. The result is more flavorful, more juicy chicken that holds moisture through cooking and reheating.</div>\n          <div class=\"step-timing\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"8\" cy=\"8\" r=\"6.5\"/><path d=\"M8 4.5V8l2.5 2.5\"/></svg> 12–24 hours</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- ══ PHASE 3: FLAVOR COATING ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">3</div>\n    <h2 class=\"section-title\">Cook Day — Flavor Coating</h2>\n    <span class=\"section-sub\">20–30 min before oven</span>\n  </div>\n\n  <div class=\"science-box\">\n    <div class=\"science-label\">why this formula works</div>\n    <div class=\"science-text\">Lemon juice (pH 2.0–2.5) denatures surface proteins within 2–3 hours, turning the exterior mushy. So: lemon <strong>zest</strong> carries the fat-soluble essential oils for intense citrus flavor with zero acid damage. A restrained amount of juice goes in the coating. Fresh lemon is squeezed <em>after</em> cooking for the bright punch — heat destroys volatile aromatics, so pre-cook lemon loses most of its vibrancy.</div>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Flavor Coating Ingredients</span>\n      <span class=\"card-header-note\">10 breasts</span>\n    </div>\n    <div class=\"card-body\">\n      <ul class=\"ingredient-list\">\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"oilAmt\">½ cup</span><span class=\"ing-name\">extra-virgin olive oil</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"zestAmt\">~3 tbsp</span><span class=\"ing-name\">lemon zest <span class=\"ing-note\">zest of <span id=\"zestLemons\">4</span> lemons — the key flavor driver</span></span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"juiceAmt\">3 tbsp</span><span class=\"ing-name\">fresh lemon juice <span class=\"ing-note\">~<span id=\"juiceLemons\">1.5</span> lemons — restrained on purpose</span></span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"garlicAmt\">10 cloves</span><span class=\"ing-name\">garlic, microplaned <span class=\"ing-note\">~3 tbsp</span></span></li>\n        <div class=\"ing-divider\"></div>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"oreganoAmt\">2 tbsp</span><span class=\"ing-name\">dried oregano</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"thymeAmt\">1 tbsp</span><span class=\"ing-name\">fresh thyme leaves</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"pepperAmt\">2 tsp</span><span class=\"ing-name\">black pepper</span></li>\n        <div class=\"ing-divider\"></div>\n        <div class=\"ing-group-label\">Optional</div>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"paprikaAmt\">1 tsp</span><span class=\"ing-name\">smoked paprika <span class=\"ing-note\">for color</span></span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"chilliAmt\">1 tsp</span><span class=\"ing-name\">red pepper flakes</span></li>\n        <div class=\"ing-divider\"></div>\n        <div class=\"ing-group-label\">Finishing (after cooking)</div>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"finishLemonAmt\">2 lemons</span><span class=\"ing-name\">fresh juice, squeezed over sliced chicken</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\" id=\"parsleyAmt\">3 tbsp</span><span class=\"ing-name\">flat-leaf parsley, chopped</span></li>\n      </ul>\n    </div>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Steps</span>\n    </div>\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Zest lemons first — then mix the coating</div>\n          <div class=\"step-body\">Before doing anything else with the coating, <strong>zest all lemons in one dedicated pass</strong> — it's the most time-consuming step and goes faster when done without context-switching. Hold each lemon at an angle against the microplane and rotate for even coverage, stopping before you hit the white pith. For large batches, a Y-peeler to remove strips then a quick knife mince is faster than a microplane. Once zesting is done, juice the same lemons with a citrus press — much faster than hand-squeezing. Then combine everything: olive oil, lemon zest, lemon juice, microplaned garlic, oregano, thyme, black pepper, and paprika (if using). The olive oil carries the fat-soluble flavor compounds from garlic, herbs, and zest; creates a protective barrier reducing surface moisture loss; and conducts heat for better browning.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Coat and temper</div>\n          <div class=\"step-body\">Remove chicken from the fridge. Toss all breasts in the coating until evenly covered. Let sit at room temperature for <strong>20–30 minutes</strong>. This accomplishes two things: flavors begin adhering to the surface, and the meat tempers slightly for more even cooking from edge to center. <strong>Do not skip the room temp rest</strong> — cold chicken straight from the fridge into the oven extends cook time and causes uneven cooking, especially in a home oven that may already be running cool.</div>\n          <div class=\"step-callout terra\">⚑ Do not exceed 2 hours of contact time with this coating. The lemon juice will begin degrading the surface texture beyond that window.</div>\n          <div class=\"step-timing\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"8\" cy=\"8\" r=\"6.5\"/><path d=\"M8 4.5V8l2.5 2.5\"/></svg> 20–30 min rest at room temp</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- ══ PHASE 3: COOK ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">4</div>\n    <h2 class=\"section-title\">Roast</h2>\n    <span class=\"section-sub\">18–22 min</span>\n  </div>\n\n  <div class=\"temp-target\">\n    <div class=\"temp-val\">435–440°F</div>\n    <div class=\"temp-text\"><strong>Conventional oven with 10–15°F cool offset.</strong> The base target for this recipe is 425°F conventional (equivalent to 400°F convection). If your oven runs 10–15°F cool, set it to 435–440°F to hit the actual target. Always verify with an oven thermometer — not the dial.</div>\n  </div>\n  <div class=\"step-callout terra\" style=\"margin-bottom:1rem;\">⚑ <strong>Minimize oven door openings.</strong> Every time you open the door, the oven drops 25–50°F and takes several minutes to recover — this is a major source of extended and unpredictable cook times. The fix: use a <strong>leave-in probe thermometer</strong> with an external display so you can read the internal temp without opening the door at all. Insert the probe before the chicken goes in, run the wire out the door crack, and monitor from outside. Once your oven is calibrated and you've done one successful batch, you'll know your window — trust it and stay out.</div>\n\n  <div class=\"card\">\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Set up your pans</div>\n          <div class=\"step-body\">Line half sheet pans (13×18\") with parchment paper. Place wire racks inside. Arrange <strong>6–8 breasts per pan</strong>, leaving 1–2 inches of space between each. Do not crowd — pooling steam drops the surface temperature below the 300°F threshold needed for browning. Place the <strong>thickest breasts in the corners and along the edges</strong> (hottest zones), thinner pieces in the center.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Add steam (optional but effective)</div>\n          <div class=\"step-body\">Place a cast iron pan with <strong>1 cup hot water</strong> on the bottom rack for the first 10 minutes. The initial steam preserves surface moisture during the critical early phase. Remove it for the final minutes to allow browning.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">3</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Rotate at the halfway mark — one time only</div>\n          <div class=\"step-body\">At <strong>10–12 minutes</strong>, rotate each pan 180° (front to back) and swap rack positions if cooking two pans. Do this <strong>quickly and deliberately</strong> — get in and out fast to minimize heat loss. This is the only planned door opening during the cook. If your oven heats relatively evenly after calibration, you can skip this entirely and avoid the temp drop. When running multiple pans, expect cook time to increase by approximately 15%.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">4</div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Pull at 160°F internal — not by time</div>\n          <div class=\"step-body\">Use a probe thermometer in the <strong>thickest part of the thickest breast on each pan</strong>. Pull when it reads <strong>160°F</strong>. Never cook by time alone — oven variance, breast size, and starting temp all shift the window. Total cook time is typically 18–22 minutes.</div>\n          <div class=\"step-callout\">The science: 160°F with a 5-minute rest achieves full food safety via pasteurization (time + temperature). The USDA 165°F instant-kill standard doesn't account for carryover hold time. Pulling at 160°F gives you dramatically juicier chicken — and it will hit 165°F on the customer's reheat anyway.</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- ══ PHASE 4: REST & FINISH ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">7</div>\n    <h2 class=\"section-title\">Rest, Slice & Finish</h2>\n    <span class=\"section-sub\">5–10 min rest</span>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Rest loosely tented</div>\n          <div class=\"step-body\">Remove from oven. Tent loosely with foil and rest on the wire rack for <strong>5–10 minutes</strong>. During cooking, muscle fibers contract and push juices to the center. Resting lets them relax and reabsorb. Cutting immediately sends that juice onto the cutting board. Expect <strong>3–5°F of carryover</strong> during rest, bringing final internal temp to 163–165°F.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Slice against the grain</div>\n          <div class=\"step-body\">Slice each breast against the grain. This shortens the muscle fibers, making each bite noticeably more tender. If meal prepping for the week, you can also <strong>store whole and slice per portion at serving</strong> to maximize moisture retention in the container.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">3</div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Finishing squeeze — this is the lemon moment</div>\n          <div class=\"step-body\">Squeeze <strong>2 fresh lemons</strong> over the hot sliced chicken. Scatter <strong>3 tablespoons chopped flat-leaf parsley</strong>. This is where the bright citrus punch comes from. Heat destroys the volatile aromatic compounds in lemon juice — anything added before cooking loses most of its vibrancy. The post-cook lemon is not optional if you want that signature brightness.</div>\n          <div class=\"step-callout gold\">The big principle: lemon <em>zest</em> in the coating (fat-soluble flavor, no acid damage) + minimal juice in the marinade + fresh lemon <em>after</em> cooking = bright citrus hit without chalky texture.</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- ══ PAN SAUCE ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">8</div>\n    <h2 class=\"section-title\">Pan Sauce — Two Ways</h2>\n    <span class=\"section-sub\">don't waste the drippings</span>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Option A — Deglaze the Pan</span>\n      <span class=\"card-header-note\">fastest, uses drippings directly</span>\n    </div>\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Deglaze immediately off the heat</div>\n          <div class=\"step-body\">While the chicken is resting, pour <strong>¼–½ cup chicken broth</strong> directly into the hot sheet pan. Use a wooden spoon or silicone spatula to scrape up all the fond (the browned bits stuck to the pan) — that's where the flavor is concentrated. The liquid will sizzle and loosen everything immediately.</div>\n          <div class=\"step-callout terra\">⚑ <strong>Skip the parchment on this pan.</strong> Fond forms on the bare metal surface — parchment sits between the drippings and the pan, so you get minimal fond and nothing meaningful to scrape. If you want the pan sauce, line one pan with parchment and leave the other bare. More cleanup on that pan, but proper drippings. If you want parchment on both pans for easy cleanup, use Option B instead.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Finish and pour over portions</div>\n          <div class=\"step-body\">Squeeze in a little fresh lemon juice, taste for salt, and pour the sauce over the sliced chicken before portioning into containers. The drippings are concentrated and flavorful — this extends them just enough to coat all portions. Adds a moisture barrier during storage too.</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Option B — Matching Lemon Garlic Sauce</span>\n      <span class=\"card-header-note\">scalable, made separately, tastes the same</span>\n    </div>\n    <div class=\"card-body\">\n      <ul class=\"ingredient-list\" style=\"margin-bottom:1rem;\">\n        <li class=\"ingredient\"><span class=\"ing-amount\">¼ cup</span><span class=\"ing-name\">extra-virgin olive oil</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">3 tbsp</span><span class=\"ing-name\">fresh lemon juice <span class=\"ing-note\">~1.5 lemons</span></span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">3 cloves</span><span class=\"ing-name\">garlic, microplaned</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">1 tsp</span><span class=\"ing-name\">honey</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">¼ tsp</span><span class=\"ing-name\">kosher salt</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">1 tbsp</span><span class=\"ing-name\">flat-leaf parsley, finely chopped</span></li>\n      </ul>\n      <div class=\"step-body\" style=\"font-size:14px; line-height:1.65;\">Warm olive oil in a small pan over low heat. Add garlic and cook 60 seconds until fragrant — do not brown. Off the heat, whisk in lemon juice, honey, and salt. Stir in parsley. This sauce mirrors the dripping flavor profile exactly and scales to any batch size. Spoon over portioned chicken before sealing containers. <strong>This is the Tandoco-scale solution</strong> — consistent, repeatable, and doesn't depend on dripping volume.</div>\n    </div>\n  </div>\n\n  <!-- ══ PHASE 7: HONEY LEMON GLAZE ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">8</div>\n    <h2 class=\"section-title\">Optional — Honey Lemon Glaze</h2>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Glaze Formula</span>\n      <span class=\"card-header-note\">brush on last 5–8 min</span>\n    </div>\n    <div class=\"card-body\">\n      <div class=\"step-body\" style=\"font-size:14px; line-height:1.65; margin-bottom:1rem;\">Mix honey, fresh lemon juice, and a pinch of salt to taste. Ratio: approximately <strong>2 parts honey : 1 part lemon juice</strong>. Thin with a little olive oil if needed for brushability.</div>\n      <div class=\"step-callout\">Timing is everything with honey. Cook chicken <strong>mostly through</strong> (~18–20 min), then pull the pan out, brush glaze generously on top, and return to oven for <strong>5–8 more minutes</strong>. For more char, hit the broiler for the <strong>last 1–2 minutes only</strong> — watch it closely, it goes from perfect to burnt fast. Adding honey earlier at 425°F gives you bitter, dark, overcooked glaze instead of glossy and caramelized.</div>\n    </div>\n  </div>\n\n  <!-- ══ PHASE 8: STORAGE ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">9</div>\n    <h2 class=\"section-title\">Storage & Reheating</h2>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Cold-Chain Protocol</span>\n    </div>\n    <div class=\"card-body\" style=\"display:flex; flex-direction:column; gap:12px;\">\n      <div class=\"step-body\" style=\"font-size:14px;line-height:1.65;\"><strong>Store whole, unsliced</strong> when possible — slicing increases surface area and accelerates moisture loss during refrigeration. Pour <strong>accumulated pan juices over the chicken</strong> before sealing containers. That liquid acts as a moisture barrier and partially reabsorbs during storage.</div>\n      <div class=\"step-body\" style=\"font-size:14px;line-height:1.65;\">Begin cooling within <strong>2 hours</strong> of leaving the oven. Use <strong>shallow containers</strong> (no deeper than 2 inches) — deep stacking traps heat in the danger zone (40–140°F). Refrigerate promptly; the old \"let it cool on the counter\" advice is more dangerous, not safer.</div>\n      <div style=\"display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-top:4px;\">\n        <div style=\"background:#f7f5f0; border-radius:10px; padding:1rem; text-align:center;\">\n          <div style=\"font-family:'Fraunces',serif; font-size:1.5rem; color:var(--navy);\">3–4 days</div>\n          <div style=\"font-size:11px; color:var(--muted); text-transform:uppercase; letter-spacing:0.06em; margin-top:4px;\">Refrigerated (standard)</div>\n        </div>\n        <div style=\"background:#f7f5f0; border-radius:10px; padding:1rem; text-align:center;\">\n          <div style=\"font-family:'Fraunces',serif; font-size:1.5rem; color:var(--navy);\">7 days</div>\n          <div style=\"font-size:11px; color:var(--muted); text-transform:uppercase; letter-spacing:0.06em; margin-top:4px;\">Vacuum sealed</div>\n        </div>\n      </div>\n      <div class=\"step-callout\" style=\"margin-top:4px;\"><strong>Reheating:</strong> Place chicken in a baking dish with ½ cup chicken broth, cover tightly with foil, heat at 300–350°F for 15–20 min. For microwave: cover with a damp paper towel, heat at medium power in 1-minute increments. A drizzle of olive oil or broth before microwaving helps significantly.</div>\n    </div>\n  </div>\n\n  <!-- ══ EQUIPMENT ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">10</div>\n    <h2 class=\"section-title\">Non-Negotiable Equipment</h2>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-body\" style=\"display:flex;flex-direction:column;gap:12px;\">\n      <div class=\"ingredient\" style=\"font-size:14px; align-items:flex-start; padding: 4px 0;\">\n        <span class=\"ing-amount\" style=\"color:var(--navy); min-width:90px;\">Probe therm.</span>\n        <span>Instant-read probe thermometer (ThermoWorks Thermapen) for spot checks. For production, add a <strong>leave-in probe with external display</strong> — insert before the chicken goes in, read temp from outside without opening the door. Eliminates the single biggest source of extended cook times.</span>\n      </div>\n      <div class=\"ingredient\" style=\"font-size:14px; align-items:flex-start; padding: 4px 0;\">\n        <span class=\"ing-amount\" style=\"color:var(--navy); min-width:90px;\">Oven therm.</span>\n        <span>A $10 oven thermometer hanging on the rack. Most ovens run 25–50°F off from the dial — know your offset before your first batch and set your oven accordingly. Document it for consistent production results.</span>\n      </div>\n      <div class=\"ingredient\" style=\"font-size:14px; align-items:flex-start; padding: 4px 0;\">\n        <span class=\"ing-amount\" style=\"color:var(--navy); min-width:90px;\">Sheet pans</span>\n        <span>Two half sheet pans (13×18\") with fitted wire racks. Butterflied breasts lay wider — you need two pans for most batches. Wire rack eliminates soggy bottoms and allows air circulation on all sides.</span>\n      </div>\n      <div class=\"ingredient\" style=\"font-size:14px; align-items:flex-start; padding: 4px 0;\">\n        <span class=\"ing-amount\" style=\"color:var(--navy); min-width:90px;\">Kitchen scale</span>\n        <span>For accurate dry brine measurements and consistent portion weights. Eyeballing is the #1 source of batch-to-batch inconsistency.</span>\n      </div>\n      <div class=\"ingredient\" style=\"font-size:14px; align-items:flex-start; padding: 4px 0;\">\n        <span class=\"ing-amount\" style=\"color:var(--navy); min-width:90px;\">Rice cooker</span>\n        <span>Runs hands-off in parallel with the chicken. Start it when the chicken goes in the oven and both finish at the same time.</span>\n      </div>\n    </div>\n  </div>\n\n  <!-- ══ VEGGIES ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">11</div>\n    <h2 class=\"section-title\">Side — Broccoli</h2>\n    <span class=\"section-sub\">oven or stovetop</span>\n  </div>\n\n  <div class=\"science-box\">\n    <div class=\"science-label\">oven space reality check</div>\n    <div class=\"science-text\">Two pans of chicken fill a standard home oven. Adding a broccoli pan means either crowding racks (which hurts everything) or running broccoli sequentially after chicken comes out. The stovetop method below frees the oven entirely and produces excellent results — char from a hot pan, not the oven.</div>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Ingredients</span>\n      <span class=\"card-header-note\">7 portions (~150g cooked each)</span>\n    </div>\n    <div class=\"card-body\">\n      <ul class=\"ingredient-list\">\n        <li class=\"ingredient\"><span class=\"ing-amount\">~1,300g</span><span class=\"ing-name\">broccoli, raw <span class=\"ing-note\">~2 large heads, cut into golf ball-sized florets</span></span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">2–3 tbsp</span><span class=\"ing-name\">olive oil</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">to taste</span><span class=\"ing-name\">kosher salt & black pepper</span></li>\n        <div class=\"ing-divider\"></div>\n        <div class=\"ing-group-label\">Optional (ties to the chicken)</div>\n        <li class=\"ingredient\"><span class=\"ing-amount\">1 tsp</span><span class=\"ing-name\">lemon zest</span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">1–2 cloves</span><span class=\"ing-name\">garlic, minced</span></li>\n      </ul>\n    </div>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Option A — Blanch + Broil (recommended)</span>\n      <span class=\"card-header-note\">best for large batches, hands-off char</span>\n    </div>\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Start blanch water when chicken goes in the oven</div>\n          <div class=\"step-body\">Bring a <strong>12–16qt stockpot</strong> of water to a rolling boil, salted generously. Starting it when the chicken goes in means the water is boiling and ready by the time you need it — no waiting. A larger pot handles more volume per batch and comes back to boil faster between batches.</div>\n          <div class=\"step-timing\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"8\" cy=\"8\" r=\"6.5\"/><path d=\"M8 4.5V8l2.5 2.5\"/></svg> ~10 min to boil</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Blanch in batches, spread immediately to dry</div>\n          <div class=\"step-body\">Add florets in batches of ~500g — don't overload the pot or the water temp drops and you lose the bright green color. Blanch each batch <strong>3–4 minutes</strong>, pull with a spider strainer, and spread immediately in a single layer on sheet pans. Don't pile them — steam trapped in a pile makes them go soft. The pot stays hot between batches so turnaround is fast. For 1,300g total expect 3 batches running back to back while the chicken finishes in the oven.</div>\n          <div class=\"step-timing\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"8\" cy=\"8\" r=\"6.5\"/><path d=\"M8 4.5V8l2.5 2.5\"/></svg> 3–4 min per batch</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">3</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Let surface dry while chicken rests</div>\n          <div class=\"step-body\">Chicken pulls from the oven and rests 5–10 min. Use that window to let the blanched broccoli dry on the sheet pans — surface moisture is the enemy of char. Pat dry with paper towels if needed. Toss with olive oil, lemon zest, garlic, salt, and pepper.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">4</div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Broil 4–6 min — hands off</div>\n          <div class=\"step-body\">Switch oven to <strong>broil on high</strong> as soon as chicken comes out. Slide broccoli pans in — run two pans simultaneously if your oven fits them. Broil <strong>4–6 minutes</strong>, no flipping, no checking. The broiler hits every piece at once across the whole pan. Done when edges are charred and stems are tender. While broccoli broils you're slicing chicken, making sauce, and portioning rice — zero active attention needed on the broccoli.</div>\n          <div class=\"step-callout gold\">This is the large-batch method — blanch handles the volume, broiler handles the char hands-off, and it all runs in parallel with the rest of the workflow. For Tandoco scale, a countertop convection oven running broccoli simultaneously with the main oven eliminates the sequencing entirely.</div>\n          <div class=\"step-timing\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"8\" cy=\"8\" r=\"6.5\"/><path d=\"M8 4.5V8l2.5 2.5\"/></svg> 4–6 min broil</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Option B — Blanch + Stovetop Sear (small batches only)</span>\n      <span class=\"card-header-note\">good for 1–2 portions, not practical at scale</span>\n    </div>\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Blanch same as above</div>\n          <div class=\"step-body\">Same blanch method — salted boiling water, 3–4 minutes, spread immediately to dry.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Sear in a hot pan</div>\n          <div class=\"step-body\">Heat a heavy skillet over high heat. Add a thin layer of olive oil, then broccoli in a single layer. Let sit undisturbed <strong>2–3 minutes</strong> until charred on the flat side, toss once. Add garlic and lemon zest in the last 30 seconds. Work in batches — crowding kills the char. <strong>Not recommended for large batches</strong> — too many rounds, too much active management alongside everything else.</div>\n          <div class=\"step-timing\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"8\" cy=\"8\" r=\"6.5\"/><path d=\"M8 4.5V8l2.5 2.5\"/></svg> 2–3 min per batch</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- ══ RICE ══ -->\n  <div class=\"section-head\">\n    <div class=\"section-num\">12</div>\n    <h2 class=\"section-title\">Side — White Rice</h2>\n    <span class=\"section-sub\">rice cooker</span>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Ingredients</span>\n      <span class=\"card-header-note\">7 portions (~125g cooked each)</span>\n    </div>\n    <div class=\"card-body\">\n      <ul class=\"ingredient-list\">\n        <li class=\"ingredient\"><span class=\"ing-amount\">~500g</span><span class=\"ing-name\">white rice, dry <span class=\"ing-note\">yields ~1,000g cooked</span></span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">to ratio</span><span class=\"ing-name\">water <span class=\"ing-note\">follow your rice cooker's markings</span></span></li>\n        <li class=\"ingredient\"><span class=\"ing-amount\">1 tsp</span><span class=\"ing-name\">kosher salt <span class=\"ing-note\">optional but recommended</span></span></li>\n      </ul>\n    </div>\n  </div>\n\n  <div class=\"card\">\n    <div class=\"card-header\">\n      <span class=\"card-header-title\">Steps</span>\n    </div>\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">1</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Rinse the rice</div>\n          <div class=\"step-body\">Rinse rice in cold water until the water runs mostly clear — 2–3 rinses. This removes excess surface starch that makes rice gummy. Drain well before adding to the cooker.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">2</div><div class=\"step-line\"></div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Cook — start with the chicken</div>\n          <div class=\"step-body\">Add rinsed rice, water to your cooker's markings, and salt. Start the rice cooker <strong>at the same time as the chicken goes in the oven</strong> — most rice cookers take 25–35 minutes, which lines up with the chicken cook and rest window. Everything finishes together.</div>\n          <div class=\"step-callout gold\">Timing the rice cooker to start with the oven is the key move — it runs hands-off in parallel and lands at the same time as the chicken without any coordination effort.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step-left\"><div class=\"step-dot\">3</div></div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Fluff and portion</div>\n          <div class=\"step-body\">When the cooker switches to warm, let it sit for 5–10 minutes then fluff with a fork. Portion into containers immediately — rice portions cleanly when warm and slightly sticky. At ~125g cooked per serving, one scoop from a standard rice paddle is roughly right; weigh the first portion and use that as your visual reference for the rest.</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"footer-note\">\n    <span class=\"tandoco-logo\">tandoco.</span>\n    <strong>eat well. feel good.</strong><br>\n    your cravings are valid. your body is a temple.\n  </div>\n\n</div>\n<script>\n  // Base recipe is for 1000g of chicken\n  const BASE_G = 1000;\n  let currentUnit = 'g';\n\n  // Kirkland organic chicken breast: 25g protein per 112g raw\n  const PROTEIN_PER_G_RAW = 25 / 112;\n\n  const BASE = {\n    salt: 15,\n    oil: 120,\n    zestTbsp: 3,\n    zestLemons: 4,\n    juiceTbsp: 3,\n    juiceLemons: 1.5,\n    garlicCloves: 10,\n    oreganoTbsp: 2,\n    thymeTbsp: 1,\n    pepperTsp: 2,\n    paprikaTsp: 1,\n    chilliTsp: 1,\n    finishLemons: 2,\n    parsleyTbsp: 3,\n  };\n\n  function setUnit(unit) {\n    currentUnit = unit;\n    const input = document.getElementById('meatWeight');\n    const btnG = document.getElementById('btnG');\n    const btnLbs = document.getElementById('btnLbs');\n    if (unit === 'g') {\n      btnG.style.background = 'var(--navy)'; btnG.style.color = '#fff'; btnG.style.borderColor = 'var(--navy)';\n      btnLbs.style.background = '#fff'; btnLbs.style.color = 'var(--ink)'; btnLbs.style.borderColor = 'var(--border)';\n      input.placeholder = 'e.g. 1590';\n    } else {\n      btnLbs.style.background = 'var(--navy)'; btnLbs.style.color = '#fff'; btnLbs.style.borderColor = 'var(--navy)';\n      btnG.style.background = '#fff'; btnG.style.color = 'var(--ink)'; btnG.style.borderColor = 'var(--border)';\n      input.placeholder = 'e.g. 3.5';\n    }\n    calcIngredients();\n  }\n\n  function setProteinGoal(val) {\n    document.getElementById('proteinGoal').value = val;\n    document.querySelectorAll('.protein-preset').forEach(btn => {\n      const isActive = btn.id === 'pp' + val;\n      btn.style.background = isActive ? 'var(--navy)' : '#fff';\n      btn.style.color = isActive ? '#fff' : 'var(--ink)';\n      btn.style.borderColor = isActive ? 'var(--navy)' : 'var(--border)';\n    });\n    calcIngredients();\n  }\n\n  function fmt(val, unit) {\n    if (unit === 'tbsp') {\n      if (val < 1) return Math.round(val * 3) + ' tsp';\n      const whole = Math.floor(val);\n      const frac = val - whole;\n      let f = '';\n      if (frac >= 0.875) return (whole + 1) + ' tbsp';\n      if (frac >= 0.625) f = ' + 2 tsp';\n      else if (frac >= 0.375) f = ' + 1 tsp';\n      else if (frac >= 0.125) f = ' + ¼ tsp';\n      return (whole > 0 ? whole : '') + f + ' tbsp';\n    }\n    if (unit === 'tsp') {\n      if (val < 0.25) return '⅛ tsp';\n      if (val < 0.5) return '¼ tsp';\n      if (val < 0.75) return '½ tsp';\n      if (val < 1) return '¾ tsp';\n      return Math.round(val * 4) / 4 + ' tsp';\n    }\n    if (unit === 'ml') {\n      if (val <= 30) return Math.round(val) + ' ml';\n      if (val <= 60) return '¼ cup';\n      if (val <= 90) return '⅓ cup';\n      if (val <= 120) return '½ cup';\n      if (val <= 160) return '⅔ cup';\n      if (val <= 180) return '¾ cup';\n      return Math.round(val / 15) / (1/15) + ' ml';\n    }\n    if (unit === 'g') return Math.round(val) + 'g';\n    return Math.round(val * 10) / 10;\n  }\n\n  function calcIngredients() {\n    const input = document.getElementById('meatWeight');\n    let raw = parseFloat(input.value);\n    const proteinGoal = parseFloat(document.getElementById('proteinGoal').value) || 50;\n\n    if (!raw || raw <= 0) {\n      document.getElementById('calcResult').style.display = 'none';\n      document.getElementById('servingResult').style.display = 'none';\n      resetToDefaults();\n      return;\n    }\n\n    const grams = currentUnit === 'lbs' ? raw * 453.592 : raw;\n    const ratio = grams / BASE_G;\n\n    // ── Serving calculator ──\n    const totalProtein = grams * PROTEIN_PER_G_RAW;\n    const idealPortions = Math.floor(totalProtein / proteinGoal);\n    const actualPortions = Math.max(1, idealPortions);\n    const rawPerPortion = Math.round(grams / actualPortions);\n    const proteinPerPortion = Math.round(rawPerPortion * PROTEIN_PER_G_RAW);\n    const hitsGoal = proteinPerPortion >= proteinGoal;\n\n    document.getElementById('portionCount').textContent = actualPortions;\n    document.getElementById('rawPerPortion').textContent = rawPerPortion + 'g';\n    document.getElementById('proteinPerPortion').textContent = '~' + proteinPerPortion + 'g';\n    document.getElementById('servingResult').style.display = 'block';\n\n    const noteEl = document.getElementById('servingNote');\n    if (hitsGoal) {\n      noteEl.innerHTML = `✓ <strong>${actualPortions} portions</strong> from this batch hits your ${proteinGoal}g protein goal — ${rawPerPortion}g raw chicken per portion. Broccoli adds ~2–3g on top.`;\n    } else {\n      const neededG = Math.ceil(proteinGoal / PROTEIN_PER_G_RAW);\n      const shortfall = proteinGoal - proteinPerPortion;\n      noteEl.innerHTML = `⚠ This batch can't hit ${proteinGoal}g protein per portion at any split. Each portion gives ~${proteinPerPortion}g — ${shortfall}g short. You'd need at least <strong>${Math.ceil(proteinGoal / PROTEIN_PER_G_RAW * actualPortions)}g raw chicken</strong> for ${actualPortions} portions at this goal.`;\n    }\n\n    // ── Salt ──\n    const saltG = Math.round(grams * 0.015);\n    const saltTsp = saltG / 2.8;\n    document.getElementById('saltAmt').textContent = saltG + 'g';\n    document.getElementById('saltNote').textContent = '~' + (saltTsp < 1 ? '¾' : Math.round(saltTsp * 2) / 2) + ' tsp';\n\n    // ── Coating ──\n    document.getElementById('oilAmt').textContent = fmt(BASE.oil * ratio, 'ml');\n    const zestT = BASE.zestTbsp * ratio;\n    document.getElementById('zestAmt').textContent = '~' + fmt(zestT, 'tbsp');\n    document.getElementById('zestLemons').textContent = Math.max(1, Math.round(BASE.zestLemons * ratio));\n    const juiceT = BASE.juiceTbsp * ratio;\n    document.getElementById('juiceAmt').textContent = fmt(juiceT, 'tbsp');\n    document.getElementById('juiceLemons').textContent = Math.max(1, Math.round(BASE.juiceLemons * ratio * 2)) / 2;\n    document.getElementById('garlicAmt').textContent = Math.max(1, Math.round(BASE.garlicCloves * ratio)) + ' cloves';\n    document.getElementById('oreganoAmt').textContent = fmt(BASE.oreganoTbsp * ratio, 'tbsp');\n    document.getElementById('thymeAmt').textContent = fmt(BASE.thymeTbsp * ratio, 'tbsp');\n    document.getElementById('pepperAmt').textContent = fmt(BASE.pepperTsp * ratio, 'tsp');\n    document.getElementById('paprikaAmt').textContent = fmt(BASE.paprikaTsp * ratio, 'tsp');\n    document.getElementById('chilliAmt').textContent = fmt(BASE.chilliTsp * ratio, 'tsp');\n    document.getElementById('finishLemonAmt').textContent = Math.max(1, Math.round(BASE.finishLemons * ratio)) + ' lemons';\n    document.getElementById('parsleyAmt').textContent = fmt(BASE.parsleyTbsp * ratio, 'tbsp');\n\n    // ── Summary grid ──\n    document.getElementById('calcResult').style.display = 'block';\n    document.getElementById('calcGrid').innerHTML = [\n      ['Kosher salt', saltG + 'g'],\n      ['Olive oil', fmt(BASE.oil * ratio, 'ml')],\n      ['Lemon zest', '~' + fmt(zestT, 'tbsp')],\n      ['Lemon juice', fmt(juiceT, 'tbsp')],\n      ['Garlic', Math.max(1, Math.round(BASE.garlicCloves * ratio)) + ' cloves'],\n      ['Dried oregano', fmt(BASE.oreganoTbsp * ratio, 'tbsp')],\n    ].map(([label, val]) => `\n      <div style=\"background:#f7f5f0; border-radius:8px; padding:10px 12px;\">\n        <div style=\"font-size:11px; color:var(--muted); margin-bottom:3px;\">${label}</div>\n        <div style=\"font-size:15px; font-weight:600; color:var(--navy);\">${val}</div>\n      </div>`).join('');\n  }\n\n  function resetToDefaults() {\n    document.getElementById('saltAmt').textContent = '35–40g';\n    document.getElementById('saltNote').textContent = '~3 tbsp + 1 tsp';\n    document.getElementById('oilAmt').textContent = '½ cup';\n    document.getElementById('zestAmt').textContent = '~3 tbsp';\n    document.getElementById('zestLemons').textContent = '4';\n    document.getElementById('juiceAmt').textContent = '3 tbsp';\n    document.getElementById('juiceLemons').textContent = '1.5';\n    document.getElementById('garlicAmt').textContent = '10 cloves';\n    document.getElementById('oreganoAmt').textContent = '2 tbsp';\n    document.getElementById('thymeAmt').textContent = '1 tbsp';\n    document.getElementById('pepperAmt').textContent = '2 tsp';\n    document.getElementById('paprikaAmt').textContent = '1 tsp';\n    document.getElementById('chilliAmt').textContent = '1 tsp';\n    document.getElementById('finishLemonAmt').textContent = '2 lemons';\n    document.getElementById('parsleyAmt').textContent = '3 tbsp';\n  }\n</script>\n</body>\n</html>","dietaryTags":[],"servingsPerBatch":14,"thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2F1TOxM5OgjxCl65Rcp1xI%2F1774727874852_Lemon-Rosemary-Chicken-57_thumb_400w.webp?alt=media","packMins":0,"activeMins":60,"ingredients":[{"libraryId":"rMwpamjAUuANkIcV9n3a","name":"Broccoli","qty":1000,"currentStock":0,"restockThreshold":0,"unit":"g","costPerUnit":0.002565,"id":"rMwpamjAUuANkIcV9n3a"},{"name":"Kirkland Chicken Breasts Boneless Skinless","qty":3400,"unit":"g","costPerUnit":0.007982,"purchasePrice":28.71,"packSize":3597.048,"currentStock":0,"restockThreshold":0}],"sellQty":5,"supplies":[{"supplyId":"FDvZuV0n5gnfmmouvfmP","name":"Parchment paper","qty":1,"unit":"each","costPerUnit":0.05}],"updatedAt":{"_seconds":1776276997,"_nanoseconds":633000000}},{"id":"36Aq04lUCwGqP8WoChao","category":"Refining","mealType":"Bakery","servingSize":"","calories":"","carbs":"","fat":"","satFat":"","cholesterol":"","sodium":"","fiber":"","sugar":"","nutritionTags":[],"menuIngredients":"","notes":"","weeklySpecial":false,"fanFavorite":false,"hideCalories":false,"packOptions":[],"menuPrice":"10","menuCategory":"Bakery","linkedProjectId":"","createdByName":"Tommy","createdAt":{"_seconds":1774847580,"_nanoseconds":966000000},"photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2F36Aq04lUCwGqP8WoChao%2F1774847581030_sordoughbread.png?alt=media&token=2f3c731a-fdc8-4ec2-9299-ae88a77d5b26","published":true,"nextAvailableDate":"2026-04-29","skuBase":"TDC-0001","servingsPerBatch":10,"sellQty":4,"thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2F36Aq04lUCwGqP8WoChao%2F1774847581030_sordoughbread_thumb_400w.webp?alt=media","owner":"tommy","instructionsHtml":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>high-protein sourdough bread — tandoco</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,700&family=Inter:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n:root {\n  --navy:      #1B1A6B;\n  --navy-dk:   #12114A;\n  --navy-lt:   #2D2FA8;\n  --accent:    #4F51D4;\n  --gold:      #C8A96E;\n  --gold-lt:   #E8C87A;\n  --cream:     #FAF8F3;\n  --sand:      #EDE8DC;\n  --border:    #E8E4DC;\n  --text:      #1A1A2E;\n  --muted:     #6B6B7B;\n  --bakery:    #be185d;\n}\n\nhtml { font-size: 16px; scroll-behavior: smooth; }\n\nbody {\n  font-family: 'Inter', sans-serif;\n  background: var(--cream);\n  color: var(--text);\n  -webkit-font-smoothing: antialiased;\n}\n\n/* ── TOP STRIPE ── */\n.top-stripe {\n  height: 5px;\n  background: linear-gradient(90deg, var(--navy) 0%, var(--navy-lt) 55%, var(--gold) 100%);\n}\n\n/* ── NAV ── */\nnav {\n  background: var(--cream);\n  border-bottom: 1px solid var(--border);\n  padding: 0 32px;\n  height: 56px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  position: sticky;\n  top: 0;\n  z-index: 100;\n}\n\n.nav-brand {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 20px;\n  font-weight: 900;\n  color: var(--navy);\n  letter-spacing: -.04em;\n  text-decoration: none;\n}\n\n.nav-tag {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .08em;\n  text-transform: uppercase;\n  color: var(--muted);\n}\n\n/* ── HERO ── */\n.hero {\n  background: var(--navy);\n  padding: 72px 32px 64px;\n  position: relative;\n  overflow: hidden;\n}\n\n.hero-inner {\n  max-width: 760px;\n  margin: 0 auto;\n  position: relative;\n  z-index: 2;\n}\n\n.hero-eyebrow {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  background: rgba(200,169,110,.15);\n  border: 1px solid rgba(200,169,110,.3);\n  border-radius: 99px;\n  padding: 5px 14px 5px 10px;\n  margin-bottom: 28px;\n}\n\n.hero-eyebrow-dot {\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  background: var(--gold);\n}\n\n.hero-eyebrow-text {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: var(--gold);\n}\n\n.hero-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: clamp(36px, 6vw, 56px);\n  font-weight: 900;\n  color: #fff;\n  letter-spacing: -.04em;\n  line-height: 1.05;\n  margin-bottom: 20px;\n}\n\n.hero-title span {\n  color: var(--gold);\n}\n\n.hero-desc {\n  font-size: 16px;\n  color: rgba(255,255,255,.65);\n  line-height: 1.7;\n  max-width: 520px;\n  margin-bottom: 40px;\n}\n\n.hero-stats {\n  display: flex;\n  gap: 32px;\n  flex-wrap: wrap;\n}\n\n.hero-stat {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.hero-stat-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 28px;\n  font-weight: 900;\n  color: #fff;\n  letter-spacing: -.03em;\n  line-height: 1;\n}\n\n.hero-stat-val span {\n  color: var(--gold);\n}\n\n.hero-stat-label {\n  font-size: 11px;\n  font-weight: 600;\n  color: rgba(255,255,255,.45);\n  text-transform: uppercase;\n  letter-spacing: .08em;\n}\n\n.hero-orb {\n  position: absolute;\n  border-radius: 50%;\n  pointer-events: none;\n}\n\n.hero-orb-1 {\n  width: 500px;\n  height: 500px;\n  background: radial-gradient(circle, rgba(79,81,212,.25) 0%, transparent 70%);\n  top: -150px;\n  right: -100px;\n}\n\n.hero-orb-2 {\n  width: 300px;\n  height: 300px;\n  background: radial-gradient(circle, rgba(200,169,110,.12) 0%, transparent 70%);\n  bottom: -50px;\n  right: 200px;\n}\n\n/* ── CATEGORY STRIPE ── */\n.cat-stripe {\n  height: 4px;\n  background: var(--bakery);\n}\n\n/* ── MAIN LAYOUT ── */\n.main {\n  max-width: 760px;\n  margin: 0 auto;\n  padding: 56px 32px 80px;\n}\n\n/* ── SECTION HEADING ── */\n.section-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .12em;\n  text-transform: uppercase;\n  color: var(--gold);\n  margin-bottom: 14px;\n}\n\n.section-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 22px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.02em;\n  margin-bottom: 24px;\n}\n\n/* ── CALL-OUT BOX ── */\n.callout {\n  background: var(--navy);\n  border-radius: 16px;\n  padding: 28px 32px;\n  margin-bottom: 48px;\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n}\n\n.callout-item {}\n\n.callout-item-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: rgba(200,169,110,.7);\n  margin-bottom: 6px;\n}\n\n.callout-item-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 15px;\n  font-weight: 700;\n  color: #fff;\n  line-height: 1.4;\n}\n\n/* ── INGREDIENT TABLE ── */\n.ingredient-section {\n  margin-bottom: 48px;\n}\n\n.ingredient-table {\n  width: 100%;\n  border-collapse: collapse;\n}\n\n.ingredient-table th {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: var(--muted);\n  text-align: left;\n  padding: 8px 16px;\n  border-bottom: 2px solid var(--border);\n}\n\n.ingredient-table td {\n  padding: 13px 16px;\n  font-size: 14px;\n  border-bottom: 1px solid var(--border);\n  vertical-align: middle;\n}\n\n.ingredient-table tr:last-child td {\n  border-bottom: none;\n}\n\n.ingredient-table tr:hover td {\n  background: var(--sand);\n}\n\n.ing-name {\n  font-weight: 600;\n  color: var(--text);\n}\n\n.ing-amount {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-weight: 800;\n  color: var(--navy);\n  white-space: nowrap;\n}\n\n.ing-note {\n  font-size: 12px;\n  color: var(--muted);\n  line-height: 1.5;\n}\n\n.ing-tag {\n  display: inline-block;\n  background: rgba(190,24,93,.1);\n  color: var(--bakery);\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .06em;\n  text-transform: uppercase;\n  padding: 3px 9px;\n  border-radius: 99px;\n}\n\n.ing-tag.gold {\n  background: rgba(200,169,110,.15);\n  color: #a07840;\n}\n\n.table-note {\n  margin-top: 12px;\n  background: var(--sand);\n  border-radius: 10px;\n  padding: 14px 18px;\n  font-size: 13px;\n  color: var(--muted);\n  line-height: 1.6;\n  display: flex;\n  gap: 10px;\n  align-items: flex-start;\n}\n\n.table-note-icon {\n  font-size: 15px;\n  flex-shrink: 0;\n  margin-top: 1px;\n}\n\n/* ── WHY IT WORKS ── */\n.why-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 48px;\n}\n\n.why-card {\n  background: #fff;\n  border: 1px solid var(--border);\n  border-radius: 14px;\n  padding: 22px 22px 20px;\n}\n\n.why-card-icon {\n  font-size: 20px;\n  margin-bottom: 10px;\n  display: block;\n}\n\n.why-card-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.01em;\n  margin-bottom: 7px;\n}\n\n.why-card-text {\n  font-size: 13px;\n  color: var(--muted);\n  line-height: 1.65;\n}\n\n/* ── STEPS ── */\n.steps-section {\n  margin-bottom: 48px;\n}\n\n.step {\n  display: grid;\n  grid-template-columns: 52px 1fr;\n  gap: 20px;\n  margin-bottom: 8px;\n  padding-bottom: 8px;\n}\n\n.step:not(:last-child) {\n  position: relative;\n}\n\n.step:not(:last-child)::after {\n  content: '';\n  position: absolute;\n  left: 25px;\n  top: 52px;\n  bottom: -8px;\n  width: 2px;\n  background: var(--border);\n}\n\n.step-num {\n  width: 52px;\n  height: 52px;\n  border-radius: 50%;\n  background: var(--navy);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  z-index: 1;\n}\n\n.step-num-text {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 16px;\n  font-weight: 900;\n  color: var(--gold);\n  letter-spacing: -.02em;\n}\n\n.step-body {\n  padding-top: 12px;\n  padding-bottom: 28px;\n}\n\n.step-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 16px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.01em;\n  margin-bottom: 8px;\n}\n\n.step-text {\n  font-size: 14px;\n  color: var(--text);\n  line-height: 1.75;\n}\n\n.step-text strong {\n  color: var(--navy);\n  font-weight: 600;\n}\n\n.step-timing {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  margin-top: 12px;\n  background: rgba(27,26,107,.06);\n  border-radius: 99px;\n  padding: 5px 12px;\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--navy);\n}\n\n/* ── MACROS ── */\n.macro-section {\n  margin-bottom: 48px;\n}\n\n.macro-compare {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n\n.macro-col {}\n\n.macro-col-head {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .08em;\n  text-transform: uppercase;\n  padding: 10px 16px;\n  border-radius: 10px 10px 0 0;\n  margin-bottom: 0;\n}\n\n.macro-col-head.original {\n  background: var(--sand);\n  color: var(--muted);\n}\n\n.macro-col-head.tandoco {\n  background: var(--navy);\n  color: var(--gold);\n}\n\n.macro-rows {\n  border: 1px solid var(--border);\n  border-radius: 0 0 12px 12px;\n  overflow: hidden;\n}\n\n.macro-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 12px 16px;\n  border-bottom: 1px solid var(--border);\n  font-size: 14px;\n}\n\n.macro-row:last-child { border-bottom: none; }\n\n.macro-row.tandoco-row {\n  background: rgba(27,26,107,.03);\n}\n\n.macro-label { color: var(--muted); font-size: 13px; }\n\n.macro-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-weight: 800;\n  color: var(--navy);\n  font-size: 15px;\n  letter-spacing: -.01em;\n}\n\n.macro-val.highlight { color: var(--bakery); }\n\n/* ── PRO TIP ── */\n.pro-tip {\n  background: linear-gradient(135deg, rgba(200,169,110,.12), rgba(200,169,110,.05));\n  border: 1px solid rgba(200,169,110,.3);\n  border-left: 4px solid var(--gold);\n  border-radius: 0 12px 12px 0;\n  padding: 20px 24px;\n  margin-bottom: 48px;\n}\n\n.pro-tip-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: #a07840;\n  margin-bottom: 8px;\n}\n\n.pro-tip-text {\n  font-size: 14px;\n  color: var(--text);\n  line-height: 1.7;\n}\n\n/* ── VARIANT ── */\n.variant-box {\n  background: var(--sand);\n  border-radius: 16px;\n  padding: 28px;\n  margin-bottom: 48px;\n}\n\n.variant-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 16px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.01em;\n  margin-bottom: 8px;\n}\n\n.variant-text {\n  font-size: 14px;\n  color: var(--muted);\n  line-height: 1.7;\n}\n\n.variant-mods {\n  margin-top: 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.variant-mod {\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  font-size: 14px;\n  color: var(--text);\n}\n\n.variant-mod::before {\n  content: '→';\n  color: var(--navy);\n  font-weight: 700;\n  flex-shrink: 0;\n  margin-top: 1px;\n}\n\n/* ── CTA ── */\n.cta-box {\n  background: var(--navy);\n  border-radius: 20px;\n  padding: 40px;\n  text-align: center;\n  position: relative;\n  overflow: hidden;\n}\n\n.cta-box::before {\n  content: '';\n  position: absolute;\n  width: 400px;\n  height: 400px;\n  border-radius: 50%;\n  background: radial-gradient(circle, rgba(79,81,212,.3) 0%, transparent 70%);\n  top: -150px;\n  right: -100px;\n  pointer-events: none;\n}\n\n.cta-eyebrow {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: var(--gold);\n  opacity: .8;\n  margin-bottom: 12px;\n}\n\n.cta-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 26px;\n  font-weight: 900;\n  color: #fff;\n  letter-spacing: -.03em;\n  line-height: 1.15;\n  margin-bottom: 14px;\n}\n\n.cta-text {\n  font-size: 15px;\n  color: rgba(255,255,255,.6);\n  line-height: 1.6;\n  max-width: 400px;\n  margin: 0 auto 28px;\n}\n\n.cta-btn {\n  display: inline-block;\n  background: linear-gradient(135deg, var(--gold), var(--gold-lt));\n  color: #1A1508;\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 800;\n  padding: 14px 32px;\n  border-radius: 99px;\n  text-decoration: none;\n  letter-spacing: -.01em;\n  box-shadow: 0 4px 20px rgba(200,169,110,.35);\n  position: relative;\n  z-index: 1;\n}\n\n/* ── FOOTER ── */\nfooter {\n  border-top: 1px solid var(--border);\n  padding: 24px 32px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  max-width: 760px;\n  margin: 0 auto;\n}\n\n.footer-brand {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 900;\n  color: var(--navy);\n  letter-spacing: -.03em;\n}\n\n.footer-meta {\n  font-size: 12px;\n  color: var(--muted);\n}\n\n/* ── DIVIDER ── */\n.divider {\n  height: 1px;\n  background: var(--border);\n  margin: 48px 0;\n}\n\n/* ── RESPONSIVE ── */\n@media (max-width: 600px) {\n  .hero { padding: 48px 20px 48px; }\n  .hero-stats { gap: 20px; }\n  .main { padding: 40px 20px 60px; }\n  .callout { grid-template-columns: 1fr; gap: 16px; }\n  .why-grid { grid-template-columns: 1fr; }\n  .macro-compare { grid-template-columns: 1fr; }\n  nav { padding: 0 20px; }\n  .cta-box { padding: 32px 24px; }\n  footer { padding: 20px; flex-direction: column; gap: 8px; text-align: center; }\n}\n</style>\n</head>\n<body>\n\n<div class=\"top-stripe\"></div>\n\n<nav>\n  <a href=\"https://tandoco.com\" class=\"nav-brand\">tandoco</a>\n  <span class=\"nav-tag\">bakery recipe</span>\n</nav>\n\n<!-- HERO -->\n<section class=\"hero\">\n  <div class=\"hero-orb hero-orb-1\"></div>\n  <div class=\"hero-orb hero-orb-2\"></div>\n  <div class=\"hero-inner\">\n    <div class=\"hero-eyebrow\">\n      <div class=\"hero-eyebrow-dot\"></div>\n      <span class=\"hero-eyebrow-text\">high-protein bakery</span>\n    </div>\n    <h1 class=\"hero-title\">high-protein<br><span>sourdough bread</span></h1>\n    <p class=\"hero-desc\">everything you love about a crusty artisan boule — open crumb, deep tang, crackly crust — rebuilt from the flour up to actually hit your macros.</p>\n    <div class=\"hero-stats\">\n      <div class=\"hero-stat\">\n        <div class=\"hero-stat-val\">9–11<span>g</span></div>\n        <div class=\"hero-stat-label\">protein / slice</div>\n      </div>\n      <div class=\"hero-stat\">\n        <div class=\"hero-stat-val\">~145</div>\n        <div class=\"hero-stat-label\">cal / slice</div>\n      </div>\n      <div class=\"hero-stat\">\n        <div class=\"hero-stat-val\">12</div>\n        <div class=\"hero-stat-label\">slices per loaf</div>\n      </div>\n      <div class=\"hero-stat\">\n        <div class=\"hero-stat-val\">36<span>h</span></div>\n        <div class=\"hero-stat-label\">total time</div>\n      </div>\n    </div>\n  </div>\n</section>\n<div class=\"cat-stripe\"></div>\n\n<!-- MAIN -->\n<main class=\"main\">\n\n  <!-- WHAT'S DIFFERENT -->\n  <div class=\"callout\">\n    <div class=\"callout-item\">\n      <div class=\"callout-item-label\">the base</div>\n      <div class=\"callout-item-val\">Alexandra Cooks' artisan sourdough — one of the most-made recipes on the internet. process unchanged.</div>\n    </div>\n    <div class=\"callout-item\">\n      <div class=\"callout-item-label\">the difference</div>\n      <div class=\"callout-item-val\">a three-ingredient flour swap doubles the protein without touching the method or killing the crumb.</div>\n    </div>\n    <div class=\"callout-item\">\n      <div class=\"callout-item-label\">hands-on time</div>\n      <div class=\"callout-item-val\">~25 minutes. the rest is waiting.</div>\n    </div>\n    <div class=\"callout-item\">\n      <div class=\"callout-item-label\">gear needed</div>\n      <div class=\"callout-item-val\">dutch oven, kitchen scale, banneton or towel-lined bowl.</div>\n    </div>\n  </div>\n\n  <!-- INGREDIENTS -->\n  <div class=\"ingredient-section\">\n    <div class=\"section-label\">ingredients</div>\n    <div class=\"section-title\">the flour blend</div>\n\n    <table class=\"ingredient-table\">\n      <thead>\n        <tr>\n          <th>ingredient</th>\n          <th>amount</th>\n          <th>original</th>\n          <th>notes</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td class=\"ing-name\">bread flour</td>\n          <td class=\"ing-amount\">400g</td>\n          <td class=\"ing-note\">was 500g</td>\n          <td class=\"ing-note\">higher baseline protein than all-purpose (12–13g per 100g dry)</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">vital wheat gluten <span class=\"ing-tag\">key swap</span></td>\n          <td class=\"ing-amount\">60g</td>\n          <td class=\"ing-note\">new</td>\n          <td class=\"ing-note\">adds direct protein + strengthens gluten structure. improves chew.</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">Nutricoast unflavored casein <span class=\"ing-tag gold\">tandoco protein</span></td>\n          <td class=\"ing-amount\">40g</td>\n          <td class=\"ing-note\">new</td>\n          <td class=\"ing-note\">slow-absorbing protein that integrates cleanly during long cold proof</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">water</td>\n          <td class=\"ing-amount\">360g</td>\n          <td class=\"ing-note\">was 325g</td>\n          <td class=\"ing-note\">increased hydration (~72%) — casein absorbs more than flour. do not reduce.</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">active sourdough starter</td>\n          <td class=\"ing-amount\">100g</td>\n          <td class=\"ing-note\">same</td>\n          <td class=\"ing-note\">use 4–6 hrs after feeding, when doubled and bubbly</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">fine sea salt</td>\n          <td class=\"ing-amount\">11g</td>\n          <td class=\"ing-note\">same</td>\n          <td class=\"ing-note\">dissolve in water before adding starter</td>\n        </tr>\n      </tbody>\n    </table>\n\n    <div class=\"table-note\">\n      <span class=\"table-note-icon\">⚖️</span>\n      <span>always measure by weight, not volume. sourdough is sensitive to flour ratios and a gram scale makes the difference between a good loaf and a great one.</span>\n    </div>\n  </div>\n\n  <!-- WHY IT WORKS -->\n  <div class=\"section-label\">the science</div>\n  <div class=\"section-title\" style=\"margin-bottom:16px;\">why this blend works</div>\n  <div class=\"why-grid\">\n    <div class=\"why-card\">\n      <span class=\"why-card-icon\">💪</span>\n      <div class=\"why-card-title\">vital wheat gluten</div>\n      <div class=\"why-card-text\">pure concentrated gluten protein. it actually strengthens dough structure rather than weakening it — unlike most protein additions. improves chew, lift, and crumb openness. the safest protein upgrade for any bread recipe.</div>\n    </div>\n    <div class=\"why-card\">\n      <span class=\"why-card-icon\">🥛</span>\n      <div class=\"why-card-title\">casein at 8% flour weight</div>\n      <div class=\"why-card-text\">conservative on purpose. casein is slow-absorbing and needs time to hydrate fully — which is exactly what the 18–24 hour cold proof gives it. rush it with a quick yeasted loaf and you get a gummy crumb. give it time and it integrates cleanly.</div>\n    </div>\n    <div class=\"why-card\">\n      <span class=\"why-card-icon\">🍞</span>\n      <div class=\"why-card-title\">bread flour baseline</div>\n      <div class=\"why-card-text\">a simple swap from all-purpose — 12–13g protein per 100g vs 10–11g. adds protein at the foundation without any trade-off. always use bread flour as your base when protein is the goal.</div>\n    </div>\n    <div class=\"why-card\">\n      <span class=\"why-card-icon\">🔬</span>\n      <div class=\"why-card-title\">sourdough bioavailability</div>\n      <div class=\"why-card-text\">long fermentation improves protein digestibility and amino acid availability. at the same gram count, sourdough protein is more bioavailable than commercial yeasted bread. the process itself is part of the nutrition story.</div>\n    </div>\n  </div>\n\n  <div class=\"divider\"></div>\n\n  <!-- STEPS -->\n  <div class=\"steps-section\">\n    <div class=\"section-label\">method</div>\n    <div class=\"section-title\">how to make it</div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">01</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">mix the dough</div>\n        <div class=\"step-text\">dissolve salt in the 360g water. add starter and stir to combine. whisk together the bread flour, vital wheat gluten, and casein in a separate bowl, then add all at once to the water mixture. mix until no dry flour remains. the dough will feel slightly stiffer than a standard sourdough — that's expected. cover and rest.</div>\n        <div class=\"step-timing\">⏱ rest 30 minutes</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">02</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">stretch and fold — 4 rounds</div>\n        <div class=\"step-text\">perform 4 sets of stretch and folds, one every 30 minutes. for each set: wet your hand, grab one side of the dough, stretch it up and fold it over to the opposite side. rotate the bowl 90° and repeat until you've gone around the full bowl. the dough will become noticeably smoother and stronger with each round.</div>\n        <div class=\"step-timing\">⏱ 2 hours total</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">03</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">bulk ferment</div>\n        <div class=\"step-text\">cover and let rise at room temperature until the dough has <strong>nearly doubled</strong> and feels airy and domed on top. timing depends heavily on your kitchen temperature — warmer rooms ferment faster. don't go by the clock; go by the dough.</div>\n        <div class=\"step-timing\">⏱ 5–12 hours depending on temp</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">04</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">shape</div>\n        <div class=\"step-text\">turn the dough out onto an unfloured surface. use a bench scraper to fold the edges in and create surface tension, shaping it into a tight ball. rest uncovered for 20–40 minutes (bench rest), then do your final shaping into a batard or boule. transfer to a floured banneton or towel-lined bowl seam-side up.</div>\n        <div class=\"step-timing\">⏱ 20–40 minute bench rest</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">05</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">cold proof</div>\n        <div class=\"step-text\">cover the banneton with plastic wrap or a shower cap and transfer to the fridge. <strong>give it the full 18–24 hours.</strong> this step is even more important with casein in the dough — the slow cold proof is what lets it fully hydrate and integrate. it also develops flavor and makes scoring easier.</div>\n        <div class=\"step-timing\">⏱ 18–24 hours in fridge</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">06</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">bake</div>\n        <div class=\"step-text\">preheat oven to 500°F (260°C) with your dutch oven inside for at least 45 minutes. turn the dough out onto parchment, score with a razor or sharp knife, and lower carefully into the hot dutch oven. bake covered for 30 minutes, then remove the lid and bake uncovered for 15 minutes. <strong>watch the crust at 25 minutes</strong> — casein can cause browning to accelerate. your real signal is internal temp: <strong>205–210°F.</strong></div>\n        <div class=\"step-timing\">⏱ 45 minutes bake time</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">07</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">cool completely</div>\n        <div class=\"step-text\">transfer to a wire rack and wait at least 1 hour before slicing. cutting into hot sourdough collapses the crumb structure and makes it gummy. it's worth the wait.</div>\n        <div class=\"step-timing\">⏱ minimum 1 hour cool</div>\n      </div>\n    </div>\n\n  </div>\n\n  <!-- PRO TIP -->\n  <div class=\"pro-tip\">\n    <div class=\"pro-tip-label\">pro tip — browning</div>\n    <div class=\"pro-tip-text\">casein browns faster than flour due to its milk protein composition. if your crust looks dark at the 25-minute mark of the uncovered bake, pull it. use an instant-read thermometer to confirm doneness — 205°F is your target. the color is a suggestion; the internal temp is the truth.</div>\n  </div>\n\n  <!-- MACROS -->\n  <div class=\"macro-section\">\n    <div class=\"section-label\">nutrition</div>\n    <div class=\"section-title\">per slice (1/12 loaf)</div>\n\n    <div class=\"macro-compare\">\n      <div class=\"macro-col\">\n        <div class=\"macro-col-head original\">original artisan sourdough</div>\n        <div class=\"macro-rows\">\n          <div class=\"macro-row\">\n            <span class=\"macro-label\">protein</span>\n            <span class=\"macro-val\">4–5g</span>\n          </div>\n          <div class=\"macro-row\">\n            <span class=\"macro-label\">calories</span>\n            <span class=\"macro-val\">~130</span>\n          </div>\n          <div class=\"macro-row\">\n            <span class=\"macro-label\">carbs</span>\n            <span class=\"macro-val\">~26g</span>\n          </div>\n        </div>\n      </div>\n      <div class=\"macro-col\">\n        <div class=\"macro-col-head tandoco\">tandoco high-protein</div>\n        <div class=\"macro-rows\">\n          <div class=\"macro-row tandoco-row\">\n            <span class=\"macro-label\">protein</span>\n            <span class=\"macro-val highlight\">9–11g</span>\n          </div>\n          <div class=\"macro-row tandoco-row\">\n            <span class=\"macro-label\">calories</span>\n            <span class=\"macro-val\">~145</span>\n          </div>\n          <div class=\"macro-row tandoco-row\">\n            <span class=\"macro-label\">carbs</span>\n            <span class=\"macro-val\">~23g</span>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"table-note\">\n      <span class=\"table-note-icon\">📊</span>\n      <span>estimates based on USDA data for bread flour, vital wheat gluten, and unflavored casein. actual macros vary with starter hydration and exact slice weight. weigh your slices for precise tracking.</span>\n    </div>\n  </div>\n\n  <!-- VARIANT -->\n  <div class=\"variant-box\">\n    <div class=\"variant-title\">want to push higher? the dense version.</div>\n    <div class=\"variant-text\">if 9–11g isn't enough and you're ok with a denser, chewier loaf that leans more sandwich bread than boule, there's a second version worth testing:</div>\n    <div class=\"variant-mods\">\n      <div class=\"variant-mod\">swap 50g more bread flour for additional vital wheat gluten (total 110g VWG, 350g bread flour)</div>\n      <div class=\"variant-mod\">increase water by 15g to compensate (375g total)</div>\n      <div class=\"variant-mod\">keep casein the same at 40g</div>\n      <div class=\"variant-mod\">target protein: ~12–13g per slice</div>\n    </div>\n    <div style=\"margin-top:16px;font-size:13px;color:var(--muted);line-height:1.6;\">the crumb will be tighter and the texture chewier — less open boule, more structured sandwich loaf. different but not bad. start with the standard version first and test from there.</div>\n  </div>\n\n  <!-- CTA -->\n  <div class=\"cta-box\">\n    <div class=\"cta-eyebrow\">made in minneapolis</div>\n    <div class=\"cta-title\">we do the prep.<br>you get the results.</div>\n    <div class=\"cta-text\">fresh high-protein meals and scratch-made protein bakery. orders close thursday. pickup sunday in minneapolis.</div>\n    <a href=\"https://tandoco.com/store\" class=\"cta-btn\">see this week's menu →</a>\n  </div>\n\n</main>\n\n<footer>\n  <div class=\"footer-brand\">tandoco</div>\n  <div class=\"footer-meta\">hello@tandoco.com · tandoco.com · @tandocohq</div>\n</footer>\n\n</body>\n</html>","menuDescription":"everything you love about a crusty sourdough bread — open crumb, deep tang, crackly crust — rebuilt from the flour up to actually hit your macros.","availableNextWeek":false,"supplies":[],"ingredients":[],"availableThisWeek":true,"dietaryTags":[],"photos":[],"protein":"12","name":"sour power bread","updatedAt":{"_seconds":1775526752,"_nanoseconds":912000000},"sortOrder":6},{"id":"6ke5pFBT1X6LggI3UfK7","description":"Soft, chewy, chocolate chip cookies.","servings":1,"instructions":"","feedback":[],"createdAt":{"_seconds":1774404201,"_nanoseconds":925000000},"status":"approved","macros":{"calories":0,"protein":9,"carbs":0,"fat":0,"fiber":0},"notes":"","linkedProjectId":"","category":"Approved","protein":"9","published":true,"nextAvailableDate":"","availableThisWeek":true,"menuIngredients":"flour, water, chocolate chips, butter, sugar","menuPrice":".50","createdByName":"Tommy","calories":"190","sodium":"20","fiber":"1","carbs":"20","fat":"5","cholesterol":"3","satFat":"0","sugar":"30","photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2F6ke5pFBT1X6LggI3UfK7%2F1774724817291_everydaychocolatechipcookies12-1-of-1.jpg?alt=media&token=a5bda191-9aa8-4671-9ebc-3f84b0af3112","sellQty":6,"servingsPerBatch":20,"ingredients":[],"servingSize":"1 Cookie","mealType":"Bakery","menuCategory":"Bakery","weeklySpecial":false,"hideCalories":false,"packOptions":[{"qty":6,"label":"half-dozen","price":4.99},{"qty":12,"label":"dozen","price":7.99}],"fanFavorite":false,"menuDescription":"the cookie that started arguments. people didn't believe it until they tasted it. packed with protein, made with real whole ingredients, and somehow still the best chocolate chip cookie you've ever had. no chalky aftertaste. no weird texture. just a cookie that actually delivers — on flavor and on your goals.","nutritionTags":[],"skuBase":"TDC-0012","thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2F6ke5pFBT1X6LggI3UfK7%2F1774724817291_everydaychocolatechipcookies12-1-of-1_thumb_400w.webp?alt=media","sortOrder":3,"owner":"tommy","instructionsHtml":"","availableNextWeek":false,"supplies":[],"name":"macro chip cookie","dietaryTags":[],"updatedAt":{"_seconds":1775520748,"_nanoseconds":302000000},"photos":[]},{"id":"ArGstRq0trJeg9FTrkIY","mealType":"Bakery","servingSize":"4","carbs":"","fat":"","satFat":"","cholesterol":"","sodium":"","fiber":"","sugar":"","nutritionTags":[],"menuIngredients":"","notes":"","nextAvailableDate":"","linkedProjectId":"","createdByName":"Tommy","createdAt":{"_seconds":1774816808,"_nanoseconds":784000000},"packOptions":[{"qty":6,"label":"half dozen","price":9.99},{"qty":12,"label":"dozen","price":17.99}],"menuPrice":"3.99","weeklySpecial":false,"hideCalories":false,"fanFavorite":false,"published":true,"availableThisWeek":true,"menuCategory":"Bakery","skuBase":"TDC-0004","photoAlt":"scratch-made chocolate protein donuts with colorful sprinkles and rich chocolate glaze, piled on a white plate, baked fresh weekly at tandoco in minneapolis","seoDescription":"fudgy baked chocolate protein donuts with 14g protein each. scratch-made in minneapolis, no fillers, no shortcuts. order thu · pickup sun. tandoco.com","menuDescription":"deep chocolate, fudgy baked crumb, 15g of protein. everything a donut should be, nothing it shouldn't. baked fresh, made with real ingredients, and actually built to fuel you.","protein":"15","ingredients":[{"id":"HVJwdYvzIfiGhAGIhdij","name":"Nutricost Casein Protein Unflavored","qty":100,"unit":"g","costPerUnit":0.03667,"currentStock":0,"restockThreshold":0,"libraryId":"HVJwdYvzIfiGhAGIhdij"},{"id":"to6Ng7UOPm5vFAylJc6m","name":"All Purpose Flour","qty":100,"unit":"g","costPerUnit":0.001984,"currentStock":0,"restockThreshold":0,"libraryId":"to6Ng7UOPm5vFAylJc6m"},{"id":"eVoI98scSnPsLw7cPTnI","name":"Baking Powder","qty":100,"unit":"g","costPerUnit":0.012346,"currentStock":0,"restockThreshold":0,"libraryId":"eVoI98scSnPsLw7cPTnI"},{"id":"tUyqh3urNM2I9VxQ7Cog","name":"Sea Salt","qty":100,"unit":"g","costPerUnit":0.005427,"currentStock":0,"restockThreshold":0,"libraryId":"tUyqh3urNM2I9VxQ7Cog"}],"calories":"230","category":"Approved","owner":"tommy","instructionsHtml":"<!--\n  tandoco — Chocolate Protein Donuts Recipe\n  Embeddable snippet. Drop inside any page container.\n  Scoped to .tandoco-recipe — won't bleed into surrounding styles.\n  Requires: Plus Jakarta Sans + Inter from Google Fonts (or already loaded).\n-->\n\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@700;800;900&family=Inter:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n\n<style>\n.tandoco-recipe {\n  --navy:    #1B1A6B;\n  --navy-dk: #12114A;\n  --navy-lt: #2D2FA8;\n  --gold:    #C8A96E;\n  --gold-lt: #E8C87A;\n  --cream:   #FAF8F3;\n  --sand:    #EDE8DC;\n  --text:    #1A1A2E;\n  --muted:   #6B6B7B;\n  --border:  #E8E4DC;\n  --bakery:  #be185d;\n  --choc:    #2c1810;\n\n  font-family: 'Inter', sans-serif;\n  color: var(--text);\n  -webkit-font-smoothing: antialiased;\n}\n\n/* ── HERO ── */\n.tandoco-recipe .recipe-hero {\n  background: linear-gradient(135deg, var(--choc) 0%, #4a2518 60%, #6b3420 100%);\n  border-radius: 20px 20px 0 0;\n  padding: 52px 56px 44px;\n  position: relative;\n  overflow: hidden;\n}\n\n.tandoco-recipe .recipe-hero::before {\n  content: '';\n  position: absolute;\n  width: 400px; height: 400px;\n  border-radius: 50%;\n  background: radial-gradient(circle, rgba(200,169,110,.12) 0%, transparent 70%);\n  top: -120px; right: -80px;\n  pointer-events: none;\n}\n\n.tandoco-recipe .recipe-hero::after {\n  content: '';\n  position: absolute;\n  width: 200px; height: 200px;\n  border-radius: 50%;\n  background: radial-gradient(circle, rgba(190,24,93,.15) 0%, transparent 70%);\n  bottom: -40px; left: 40px;\n  pointer-events: none;\n}\n\n.tandoco-recipe .hero-badge {\n  display: inline-flex;\n  align-items: center;\n  background: var(--bakery);\n  color: #fff;\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 10px;\n  font-weight: 800;\n  letter-spacing: .12em;\n  text-transform: uppercase;\n  padding: 5px 14px;\n  border-radius: 99px;\n  margin-bottom: 20px;\n}\n\n.tandoco-recipe .recipe-hero h1 {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: clamp(28px, 4vw, 44px);\n  font-weight: 900;\n  color: #fff;\n  letter-spacing: -.03em;\n  line-height: 1.05;\n  margin-bottom: 10px;\n}\n\n.tandoco-recipe .recipe-hero h1 em {\n  color: var(--gold-lt);\n  font-style: normal;\n}\n\n.tandoco-recipe .recipe-tagline {\n  font-size: 14px;\n  color: rgba(255,255,255,.5);\n  font-weight: 500;\n  letter-spacing: .01em;\n  margin-bottom: 32px;\n}\n\n.tandoco-recipe .recipe-stats {\n  display: flex;\n  gap: 0;\n  flex-wrap: wrap;\n}\n\n.tandoco-recipe .stat-pill {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 14px 24px;\n  border-right: 1px solid rgba(255,255,255,.1);\n  min-width: 90px;\n}\n\n.tandoco-recipe .stat-pill:last-child { border-right: none; }\n.tandoco-recipe .stat-pill:first-child { padding-left: 0; }\n\n.tandoco-recipe .stat-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 22px;\n  font-weight: 900;\n  color: var(--gold-lt);\n  letter-spacing: -.02em;\n  line-height: 1;\n  margin-bottom: 4px;\n}\n\n.tandoco-recipe .stat-lbl {\n  font-size: 10px;\n  color: rgba(255,255,255,.45);\n  font-weight: 600;\n  letter-spacing: .08em;\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n/* ── BODY ── */\n.tandoco-recipe .recipe-body {\n  background: var(--cream);\n  padding: 48px 56px;\n  display: grid;\n  grid-template-columns: 1fr 1.6fr;\n  gap: 48px;\n  align-items: start;\n}\n\n/* ── INGREDIENTS ── */\n.tandoco-recipe .ing-section {\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n}\n\n.tandoco-recipe .ing-group {\n  background: var(--sand);\n  border-radius: 14px;\n  padding: 20px 22px;\n}\n\n.tandoco-recipe .ing-group-title {\n  font-size: 9px;\n  font-weight: 800;\n  letter-spacing: .14em;\n  text-transform: uppercase;\n  color: var(--gold);\n  margin-bottom: 14px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.tandoco-recipe .ing-group-title::after {\n  content: '';\n  flex: 1;\n  height: 1px;\n  background: var(--border);\n}\n\n.tandoco-recipe .ing-list {\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 9px;\n}\n\n.tandoco-recipe .ing-list li {\n  font-size: 13px;\n  color: var(--text);\n  line-height: 1.4;\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  gap: 8px;\n}\n\n.tandoco-recipe .ing-list li::after {\n  content: '';\n  flex: 1;\n  border-bottom: 1px dotted var(--border);\n  margin: 0 6px;\n  order: 1;\n}\n\n.tandoco-recipe .ing-amount {\n  font-weight: 700;\n  color: var(--navy);\n  white-space: nowrap;\n  order: 2;\n}\n\n.tandoco-recipe .ing-name { order: 0; }\n\n.tandoco-recipe .ing-group.glaze {\n  background: var(--navy-dk);\n}\n\n.tandoco-recipe .ing-group.glaze .ing-group-title {\n  color: var(--gold);\n}\n\n.tandoco-recipe .ing-group.glaze .ing-group-title::after {\n  background: rgba(255,255,255,.1);\n}\n\n.tandoco-recipe .ing-group.glaze li {\n  color: rgba(255,255,255,.8);\n}\n\n.tandoco-recipe .ing-group.glaze .ing-amount {\n  color: var(--gold-lt);\n}\n\n.tandoco-recipe .ing-group.glaze .ing-list li::after {\n  border-color: rgba(255,255,255,.1);\n}\n\n/* ── INSTRUCTIONS ── */\n.tandoco-recipe .steps-section {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n}\n\n.tandoco-recipe .step {\n  display: flex;\n  gap: 16px;\n  align-items: flex-start;\n}\n\n.tandoco-recipe .step-num {\n  width: 34px;\n  height: 34px;\n  border-radius: 50%;\n  background: linear-gradient(135deg, var(--gold), var(--gold-lt));\n  color: #1A1508;\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 12px;\n  font-weight: 900;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  margin-top: 1px;\n}\n\n.tandoco-recipe .step-content {}\n\n.tandoco-recipe .step-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.01em;\n  margin-bottom: 4px;\n}\n\n.tandoco-recipe .step-body {\n  font-size: 13px;\n  color: var(--muted);\n  line-height: 1.65;\n}\n\n.tandoco-recipe .step-body strong {\n  color: var(--text);\n  font-weight: 600;\n}\n\n/* ── NOTES ── */\n.tandoco-recipe .recipe-notes {\n  background: var(--navy-dk);\n  border-radius: 0 0 20px 20px;\n  padding: 32px 56px;\n}\n\n.tandoco-recipe .notes-title {\n  font-size: 9px;\n  font-weight: 800;\n  letter-spacing: .14em;\n  text-transform: uppercase;\n  color: var(--gold);\n  margin-bottom: 18px;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.tandoco-recipe .notes-title::after {\n  content: '';\n  flex: 1;\n  height: 1px;\n  background: rgba(255,255,255,.08);\n}\n\n.tandoco-recipe .notes-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n}\n\n.tandoco-recipe .note-item {\n  display: flex;\n  gap: 10px;\n  align-items: flex-start;\n  background: rgba(255,255,255,.04);\n  border: 1px solid rgba(255,255,255,.06);\n  border-radius: 10px;\n  padding: 12px 14px;\n}\n\n.tandoco-recipe .note-dot {\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  background: var(--gold);\n  flex-shrink: 0;\n  margin-top: 5px;\n}\n\n.tandoco-recipe .note-text {\n  font-size: 12px;\n  color: rgba(255,255,255,.65);\n  line-height: 1.55;\n}\n\n.tandoco-recipe .note-text strong {\n  color: rgba(255,255,255,.9);\n  font-weight: 600;\n}\n\n/* ── FOOTER ── */\n.tandoco-recipe .recipe-footer {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 18px 56px;\n  border-top: 1px solid rgba(255,255,255,.07);\n  flex-wrap: wrap;\n  gap: 10px;\n}\n\n.tandoco-recipe .recipe-footer-brand {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 13px;\n  font-weight: 900;\n  color: rgba(255,255,255,.4);\n  letter-spacing: -.02em;\n}\n\n.tandoco-recipe .recipe-footer-meta {\n  font-size: 11px;\n  color: rgba(255,255,255,.25);\n}\n\n/* ── RESPONSIVE ── */\n@media (max-width: 680px) {\n  .tandoco-recipe .recipe-hero  { padding: 36px 24px 32px; border-radius: 16px 16px 0 0; }\n  .tandoco-recipe .recipe-body  { grid-template-columns: 1fr; padding: 32px 24px; gap: 32px; }\n  .tandoco-recipe .recipe-notes { padding: 28px 24px; border-radius: 0 0 16px 16px; }\n  .tandoco-recipe .recipe-footer { padding: 16px 24px; }\n  .tandoco-recipe .notes-grid   { grid-template-columns: 1fr; }\n  .tandoco-recipe .stat-pill    { padding: 12px 16px; min-width: 70px; }\n}\n</style>\n\n<!-- ═══════════════════════════════════════\n     TANDOCO RECIPE — embeddable content block\n════════════════════════════════════════ -->\n<div class=\"tandoco-recipe\">\n\n  <!-- HERO -->\n  <div class=\"recipe-hero\">\n    <div class=\"hero-badge\">Bakery · Recipe Guide</div>\n    <h1>chocolate<br><em>protein donuts</em></h1>\n    <div class=\"recipe-tagline\">moist · fudgy · baked · real ingredients · nutricoast casein</div>\n    <div class=\"recipe-stats\">\n      <div class=\"stat-pill\">\n        <div class=\"stat-val\">12</div>\n        <div class=\"stat-lbl\">donuts</div>\n      </div>\n      <div class=\"stat-pill\">\n        <div class=\"stat-val\">~20</div>\n        <div class=\"stat-lbl\">minutes</div>\n      </div>\n      <div class=\"stat-pill\">\n        <div class=\"stat-val\">~230</div>\n        <div class=\"stat-lbl\">cal each</div>\n      </div>\n      <div class=\"stat-pill\">\n        <div class=\"stat-val\">14g+</div>\n        <div class=\"stat-lbl\">protein</div>\n      </div>\n    </div>\n  </div>\n\n  <!-- BODY: ingredients + steps -->\n  <div class=\"recipe-body\">\n\n    <!-- INGREDIENTS -->\n    <div class=\"ing-section\">\n\n      <div class=\"ing-group\">\n        <div class=\"ing-group-title\">Dry</div>\n        <ul class=\"ing-list\">\n          <li><span class=\"ing-name\">Nutricoast casein powder</span><span class=\"ing-amount\">1 cup</span></li>\n          <li><span class=\"ing-name\">All-purpose flour</span><span class=\"ing-amount\">1 cup</span></li>\n          <li><span class=\"ing-name\">Baking powder</span><span class=\"ing-amount\">2 tsp</span></li>\n          <li><span class=\"ing-name\">Salt</span><span class=\"ing-amount\">¼ tsp</span></li>\n        </ul>\n      </div>\n\n      <div class=\"ing-group\">\n        <div class=\"ing-group-title\">Wet</div>\n        <ul class=\"ing-list\">\n          <li><span class=\"ing-name\">Coconut or brown sugar</span><span class=\"ing-amount\">¾ cup</span></li>\n          <li><span class=\"ing-name\">Full-fat Greek yogurt</span><span class=\"ing-amount\">½ cup</span></li>\n          <li><span class=\"ing-name\">Sour cream</span><span class=\"ing-amount\">¼ cup</span></li>\n          <li><span class=\"ing-name\">Whole egg</span><span class=\"ing-amount\">1</span></li>\n          <li><span class=\"ing-name\">Neutral oil</span><span class=\"ing-amount\">3 tbsp</span></li>\n          <li><span class=\"ing-name\">Vanilla extract</span><span class=\"ing-amount\">1 tsp</span></li>\n          <li><span class=\"ing-name\">Whole milk</span><span class=\"ing-amount\">¾ cup</span></li>\n        </ul>\n      </div>\n\n      <div class=\"ing-group\">\n        <div class=\"ing-group-title\">Cocoa Bloom</div>\n        <ul class=\"ing-list\">\n          <li><span class=\"ing-name\">Unsweetened cocoa, sifted</span><span class=\"ing-amount\">½ cup</span></li>\n          <li><span class=\"ing-name\">Hot water</span><span class=\"ing-amount\">12 tbsp</span></li>\n        </ul>\n      </div>\n\n      <div class=\"ing-group glaze\">\n        <div class=\"ing-group-title\">Casein Glaze</div>\n        <ul class=\"ing-list\">\n          <li><span class=\"ing-name\">Powdered sugar</span><span class=\"ing-amount\">1½ cup</span></li>\n          <li><span class=\"ing-name\">Nutricoast casein powder</span><span class=\"ing-amount\">2 tbsp</span></li>\n          <li><span class=\"ing-name\">Unsweetened cocoa</span><span class=\"ing-amount\">3 tbsp</span></li>\n          <li><span class=\"ing-name\">Cornstarch</span><span class=\"ing-amount\">2 tsp</span></li>\n          <li><span class=\"ing-name\">Milk of choice</span><span class=\"ing-amount\">4 tbsp</span></li>\n        </ul>\n      </div>\n\n    </div>\n\n    <!-- INSTRUCTIONS -->\n    <div class=\"steps-section\">\n\n      <div class=\"step\">\n        <div class=\"step-num\">01</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Preheat & prep</div>\n          <div class=\"step-body\">Preheat oven to <strong>350°F</strong>. Grease a 12-count donut pan with cooking spray.</div>\n        </div>\n      </div>\n\n      <div class=\"step\">\n        <div class=\"step-num\">02</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Bloom the cocoa</div>\n          <div class=\"step-body\">Whisk cocoa with all <strong>12 tbsp hot water</strong> until fully smooth. Let sit 2–3 min. Don't reduce the water.</div>\n        </div>\n      </div>\n\n      <div class=\"step\">\n        <div class=\"step-num\">03</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Mix dry ingredients</div>\n          <div class=\"step-body\">Whisk casein, flour, baking powder, and salt in a large bowl. <strong>Break up every casein clump</strong> before continuing.</div>\n        </div>\n      </div>\n\n      <div class=\"step\">\n        <div class=\"step-num\">04</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Mix wet ingredients</div>\n          <div class=\"step-body\"><strong>Whisk sugar into yogurt and sour cream first</strong> until fully dissolved. Then add egg, oil, vanilla, milk, and bloomed cocoa. Whisk until smooth.</div>\n        </div>\n      </div>\n\n      <div class=\"step\">\n        <div class=\"step-num\">05</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Combine & rest</div>\n          <div class=\"step-body\">Fold wet into dry until just combined. Rest 2–3 min for casein to absorb. Should be thick but pipeable. Add milk 1 tbsp at a time if needed.</div>\n        </div>\n      </div>\n\n      <div class=\"step\">\n        <div class=\"step-num\">06</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Fill & bake</div>\n          <div class=\"step-body\">Pipe into all 12 cavities. Bake <strong>13–15 min</strong>. Pull at moist crumbs — not wet, not clean. Casein sets hard as it cools.</div>\n        </div>\n      </div>\n\n      <div class=\"step\">\n        <div class=\"step-num\">07</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Cool</div>\n          <div class=\"step-body\">Rest in pan <strong>10 min</strong>. Move to wire rack and cool fully before glazing.</div>\n        </div>\n      </div>\n\n      <div class=\"step\">\n        <div class=\"step-num\">08</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Make the casein glaze</div>\n          <div class=\"step-body\">Whisk powdered sugar, casein, cocoa, and cornstarch <strong>dry first</strong>. Drizzle in milk slowly. Sets fast with 2 tsp cornstarch — <strong>work quickly</strong>.</div>\n        </div>\n      </div>\n\n      <div class=\"step\">\n        <div class=\"step-num\">09</div>\n        <div class=\"step-content\">\n          <div class=\"step-title\">Glaze & set</div>\n          <div class=\"step-body\">Dip each cooled donut into the glaze. Return to rack. Sets firm in <strong>5–10 min</strong> before stacking.</div>\n        </div>\n      </div>\n\n    </div>\n  </div>\n\n  <!-- NOTES -->\n  <div class=\"recipe-notes\">\n    <div class=\"notes-title\">Baker's Notes</div>\n    <div class=\"notes-grid\">\n      <div class=\"note-item\">\n        <div class=\"note-dot\"></div>\n        <div class=\"note-text\"><strong>Sugar goes in wet.</strong> Dissolve into yogurt and sour cream first. Undissolved sugar = gritty texture.</div>\n      </div>\n      <div class=\"note-item\">\n        <div class=\"note-dot\"></div>\n        <div class=\"note-text\"><strong>Don't skip the sugar.</strong> It holds moisture and tenderizes. Skipping = dense, dry donuts.</div>\n      </div>\n      <div class=\"note-item\">\n        <div class=\"note-dot\"></div>\n        <div class=\"note-text\"><strong>12 tbsp bloom water is correct</strong> for ½ cup cocoa. Don't reduce it.</div>\n      </div>\n      <div class=\"note-item\">\n        <div class=\"note-dot\"></div>\n        <div class=\"note-text\"><strong>Glaze: mix all dry first</strong> before any milk. Sets fast with 2 tsp cornstarch — work quickly.</div>\n      </div>\n      <div class=\"note-item\">\n        <div class=\"note-dot\"></div>\n        <div class=\"note-text\"><strong>Pull at moist crumbs.</strong> Clean toothpick = overdone. Casein sets hard as it cools.</div>\n      </div>\n      <div class=\"note-item\">\n        <div class=\"note-dot\"></div>\n        <div class=\"note-text\"><strong>Storage:</strong> airtight fridge 1 week · freeze 6 months, thaw overnight.</div>\n      </div>\n    </div>\n\n    <div class=\"recipe-footer\">\n      <div class=\"recipe-footer-brand\">tandoco</div>\n      <div class=\"recipe-footer-meta\">tandoco.com · @tandocohq · Minneapolis, MN</div>\n    </div>\n  </div>\n\n</div>\n<!-- end .tandoco-recipe -->","dietaryTags":[],"photos":[],"photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FArGstRq0trJeg9FTrkIY%2F1775360807610_Cookies.png?alt=media&token=0155a455-4901-4fdc-8661-57efc6a9da70","thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FArGstRq0trJeg9FTrkIY%2F1775360807610_Cookies_thumb_400w.webp?alt=media","availableNextWeek":false,"supplies":[],"name":"glaze & gain donut","updatedAt":{"_seconds":1775520845,"_nanoseconds":199000000},"sortOrder":5,"packMins":0,"activeMins":0},{"id":"Cqq9SH8aMpwxRWMOY8YC","name":"French Baugette","category":"Refining","mealType":"Bakery","servingSize":"","protein":"","calories":"","carbs":"","fat":"","satFat":"","cholesterol":"","sodium":"","fiber":"","sugar":"","nutritionTags":[],"menuIngredients":"","ingredients":[],"notes":"crispy outside. pillowy inside. made with real ingredients, baked fresh every sunday. this is what bread is supposed to taste like.","published":true,"availableThisWeek":false,"weeklySpecial":false,"fanFavorite":false,"hideCalories":false,"packOptions":[],"nextAvailableDate":"","menuPrice":"","menuCategory":"","menuDescription":"","linkedProjectId":"","createdByName":"Tommy","createdAt":{"_seconds":1774846552,"_nanoseconds":222000000},"photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FCqq9SH8aMpwxRWMOY8YC%2F1774846552289_62.png.webp?alt=media&token=1c26a700-f2b2-4f05-bc5a-74cb52e9dfaa","updatedAt":{"_seconds":1774935671,"_nanoseconds":734000000},"skuBase":"TDC-0002","thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FCqq9SH8aMpwxRWMOY8YC%2F1774846552289_62.png_thumb_400w.webp?alt=media","sortOrder":10},{"id":"GyiMmU6Tmv9uNEojCU0L","name":"Green Smoothie","category":"Ideation","servingSize":"","protein":"20","calories":"200","carbs":"","fat":"","satFat":"","cholesterol":"","sodium":"","fiber":"","sugar":"","nutritionTags":[],"menuIngredients":"","ingredients":[],"notes":"","published":true,"availableThisWeek":true,"nextAvailableDate":"","menuPrice":"6","menuDescription":"","linkedProjectId":"","createdByName":"Omar Yusuf","createdAt":{"_seconds":1774809134,"_nanoseconds":405000000},"photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FGyiMmU6Tmv9uNEojCU0L%2F1774809230499_IMG_4279.jpeg?alt=media&token=811d401c-581e-40ef-b398-3e0fa726247b","mealType":"Smoothie","menuCategory":"Smoothie","updatedAt":{"_seconds":1774935671,"_nanoseconds":734000000},"skuBase":"TDC-0005","thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FGyiMmU6Tmv9uNEojCU0L%2F1774809230499_IMG_4279_thumb_400w.webp?alt=media","sortOrder":8},{"id":"KGOv4bJNqhM8NUVsfRdy","description":"Protein packed, antioxidant rich, soft bueberry muffins","servingSize":"1 muffin","servings":1,"status":"refining","macros":{"calories":0,"protein":13,"carbs":0,"fat":0,"fiber":0},"ingredients":[],"instructions":"","feedback":[],"createdAt":{"_seconds":1774393304,"_nanoseconds":527000000},"createdByName":"Tommy","notes":"Make more aesthetic","carbs":"","linkedProjectId":"","protein":"13","fat":"","calories":"","category":"Refining","menuPrice":"7.99","mealType":"Bakery","nutritionTags":[],"published":true,"menuIngredients":"","menuCategory":"Bakery","sodium":"","cholesterol":"","satFat":"","nextAvailableDate":"","availableThisWeek":true,"sugar":"","photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FKGOv4bJNqhM8NUVsfRdy%2F1774817213480_IMG_0954.jpeg?alt=media&token=6d438c39-ef17-4a06-a71c-27f8b54cf858","weeklySpecial":true,"hideCalories":false,"packOptions":[{"qty":4,"label":"4 pack","price":8.99},{"qty":8,"label":"8 pack","price":13.99}],"fanFavorite":false,"skuBase":"TDC-0015","thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FKGOv4bJNqhM8NUVsfRdy%2F1774817213480_IMG_0954_thumb_400w.webp?alt=media","owner":"tommy","instructionsHtml":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>blueberry protein bran muffins — tandoco</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,700&family=Inter:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n:root {\n  --navy:      #1B1A6B;\n  --navy-dk:   #12114A;\n  --navy-lt:   #2D2FA8;\n  --accent:    #4F51D4;\n  --gold:      #C8A96E;\n  --gold-lt:   #E8C87A;\n  --cream:     #FAF8F3;\n  --sand:      #EDE8DC;\n  --border:    #E8E4DC;\n  --text:      #1A1A2E;\n  --muted:     #6B6B7B;\n  --bakery:    #be185d;\n  --bakery-lt: #fbcfe8;\n  --bakery-dk: #9d174d;\n  --berry:     #4c1d95;\n  --berry-lt:  #ede9fe;\n}\n\nhtml { font-size: 16px; scroll-behavior: smooth; }\nbody {\n  font-family: 'Inter', sans-serif;\n  background: var(--cream);\n  color: var(--text);\n  -webkit-font-smoothing: antialiased;\n}\n\n/* ── TOP STRIPE ── */\n.top-stripe {\n  height: 5px;\n  background: linear-gradient(90deg, var(--navy) 0%, var(--navy-lt) 50%, var(--bakery) 100%);\n}\n\n/* ── NAV ── */\nnav {\n  background: var(--cream);\n  border-bottom: 1px solid var(--border);\n  padding: 0 32px;\n  height: 56px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  position: sticky;\n  top: 0;\n  z-index: 100;\n  backdrop-filter: blur(12px);\n}\n\n.nav-brand {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 20px;\n  font-weight: 900;\n  color: var(--navy);\n  letter-spacing: -.04em;\n  text-decoration: none;\n}\n\n.nav-crumb {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 12px;\n  color: var(--muted);\n}\n\n.nav-crumb-sep { color: var(--border); }\n.nav-crumb-active { color: var(--navy); font-weight: 600; }\n\n/* ── HERO ── */\n.hero {\n  background: var(--navy);\n  padding: 64px 32px 56px;\n  position: relative;\n  overflow: hidden;\n}\n\n.hero-inner {\n  max-width: 760px;\n  margin: 0 auto;\n  position: relative;\n  z-index: 2;\n  display: grid;\n  grid-template-columns: 1fr auto;\n  gap: 40px;\n  align-items: center;\n}\n\n.hero-left {}\n\n.hero-eyebrow {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  background: rgba(190,24,93,.18);\n  border: 1px solid rgba(190,24,93,.35);\n  border-radius: 99px;\n  padding: 5px 14px 5px 10px;\n  margin-bottom: 24px;\n}\n\n.hero-eyebrow-dot {\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  background: var(--bakery);\n}\n\n.hero-eyebrow-text {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: #f472b6;\n}\n\nh1.hero-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: clamp(32px, 5vw, 50px);\n  font-weight: 900;\n  color: #fff;\n  letter-spacing: -.04em;\n  line-height: 1.05;\n  margin-bottom: 16px;\n}\n\nh1.hero-title em {\n  font-style: normal;\n  color: var(--gold);\n}\n\n.hero-desc {\n  font-size: 15px;\n  color: rgba(255,255,255,.6);\n  line-height: 1.7;\n  max-width: 460px;\n  margin-bottom: 32px;\n}\n\n.hero-badges {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n.hero-badge {\n  background: rgba(255,255,255,.08);\n  border: 1px solid rgba(255,255,255,.14);\n  border-radius: 99px;\n  padding: 6px 14px;\n  font-size: 12px;\n  font-weight: 600;\n  color: rgba(255,255,255,.8);\n}\n\n/* stat pill stack */\n.hero-stats {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  flex-shrink: 0;\n}\n\n.stat-pill {\n  background: rgba(255,255,255,.07);\n  border: 1px solid rgba(255,255,255,.12);\n  border-radius: 14px;\n  padding: 14px 20px;\n  text-align: center;\n  min-width: 110px;\n}\n\n.stat-pill-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 26px;\n  font-weight: 900;\n  color: #fff;\n  letter-spacing: -.03em;\n  line-height: 1;\n}\n\n.stat-pill-val.pink { color: #f9a8d4; }\n.stat-pill-val.gold { color: var(--gold); }\n\n.stat-pill-label {\n  font-size: 10px;\n  font-weight: 600;\n  color: rgba(255,255,255,.4);\n  text-transform: uppercase;\n  letter-spacing: .08em;\n  margin-top: 4px;\n}\n\n/* orbs */\n.hero-orb {\n  position: absolute;\n  border-radius: 50%;\n  pointer-events: none;\n}\n.orb1 { width: 480px; height: 480px; background: radial-gradient(circle, rgba(190,24,93,.18) 0%, transparent 70%); top: -160px; right: -80px; }\n.orb2 { width: 280px; height: 280px; background: radial-gradient(circle, rgba(200,169,110,.1) 0%, transparent 70%); bottom: -80px; left: 200px; }\n\n/* ── CAT STRIPE ── */\n.cat-stripe { height: 4px; background: var(--bakery); }\n\n/* ── MAIN ── */\n.main {\n  max-width: 760px;\n  margin: 0 auto;\n  padding: 56px 32px 80px;\n}\n\n/* ── LABELS ── */\n.section-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .12em;\n  text-transform: uppercase;\n  color: var(--bakery);\n  margin-bottom: 10px;\n}\n\nh2.section-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 22px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.02em;\n  margin-bottom: 20px;\n}\n\n/* ── QUICK FACTS ── */\n.quick-facts {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 12px;\n  margin-bottom: 48px;\n}\n\n.fact-card {\n  background: var(--navy);\n  border-radius: 14px;\n  padding: 20px 16px;\n  text-align: center;\n}\n\n.fact-card-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 22px;\n  font-weight: 900;\n  color: var(--gold);\n  letter-spacing: -.02em;\n  line-height: 1;\n  margin-bottom: 5px;\n}\n\n.fact-card-label {\n  font-size: 11px;\n  font-weight: 600;\n  color: rgba(255,255,255,.5);\n  text-transform: uppercase;\n  letter-spacing: .07em;\n}\n\n/* ── INGREDIENT TABLE ── */\n.ingredient-section { margin-bottom: 48px; }\n\n.ing-table {\n  width: 100%;\n  border-collapse: collapse;\n  margin-bottom: 12px;\n}\n\n.ing-table th {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: var(--muted);\n  text-align: left;\n  padding: 8px 14px;\n  border-bottom: 2px solid var(--border);\n}\n\n.ing-table td {\n  padding: 12px 14px;\n  font-size: 14px;\n  border-bottom: 1px solid var(--border);\n  vertical-align: middle;\n  line-height: 1.5;\n}\n\n.ing-table tr:last-child td { border-bottom: none; }\n.ing-table tbody tr:hover td { background: var(--sand); transition: background .15s; }\n\n.ing-name { font-weight: 600; color: var(--text); }\n.ing-amount {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-weight: 800;\n  color: var(--navy);\n  white-space: nowrap;\n}\n\n.ing-orig { font-size: 12px; color: var(--muted); }\n.ing-note { font-size: 12px; color: var(--muted); line-height: 1.5; }\n\n.tag {\n  display: inline-block;\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .06em;\n  text-transform: uppercase;\n  padding: 3px 9px;\n  border-radius: 99px;\n  white-space: nowrap;\n}\n.tag-new { background: rgba(190,24,93,.1); color: var(--bakery-dk); }\n.tag-gold { background: rgba(200,169,110,.15); color: #8a6530; }\n.tag-fiber { background: rgba(76,29,149,.1); color: var(--berry); }\n.tag-same { background: var(--sand); color: var(--muted); }\n\n.table-note {\n  background: var(--sand);\n  border-radius: 10px;\n  padding: 13px 16px;\n  font-size: 13px;\n  color: var(--muted);\n  line-height: 1.6;\n  display: flex;\n  gap: 10px;\n  align-items: flex-start;\n}\n.table-note-icon { font-size: 15px; flex-shrink: 0; margin-top: 1px; }\n\n/* ── CALLOUT CARD ── */\n.callout-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 48px;\n}\n\n.callout-card {\n  border-radius: 14px;\n  padding: 22px;\n  border: 1px solid var(--border);\n}\n\n.callout-card.dark {\n  background: var(--navy);\n  border-color: transparent;\n}\n\n.callout-card-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: var(--muted);\n  margin-bottom: 7px;\n}\n\n.callout-card.dark .callout-card-label { color: rgba(200,169,110,.65); }\n\n.callout-card-text {\n  font-size: 14px;\n  color: var(--text);\n  line-height: 1.6;\n  font-weight: 500;\n}\n\n.callout-card.dark .callout-card-text { color: rgba(255,255,255,.85); }\n\n/* ── PROTEIN + FIBER BREAKDOWN ── */\n.pf-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 48px;\n}\n\n.pf-card {\n  border-radius: 14px;\n  overflow: hidden;\n  border: 1px solid var(--border);\n}\n\n.pf-card-head {\n  padding: 14px 18px;\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .08em;\n  text-transform: uppercase;\n}\n\n.pf-card-head.protein { background: var(--bakery); color: #fff; }\n.pf-card-head.fiber { background: var(--berry); color: #fff; }\n\n.pf-sources {\n  background: #fff;\n}\n\n.pf-source {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 11px 18px;\n  border-bottom: 1px solid var(--border);\n  font-size: 13px;\n}\n\n.pf-source:last-child { border-bottom: none; }\n.pf-source-name { color: var(--muted); }\n.pf-source-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-weight: 800;\n  color: var(--navy);\n  font-size: 14px;\n}\n\n.pf-source-val.pink { color: var(--bakery); }\n.pf-source-val.purple { color: var(--berry); }\n\n.pf-total {\n  background: var(--sand);\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 13px 18px;\n}\n\n.pf-total-label {\n  font-size: 12px;\n  font-weight: 700;\n  color: var(--navy);\n  text-transform: uppercase;\n  letter-spacing: .06em;\n}\n\n.pf-total-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 20px;\n  font-weight: 900;\n  letter-spacing: -.02em;\n}\n\n.pf-total-val.pink { color: var(--bakery); }\n.pf-total-val.purple { color: var(--berry); }\n\n/* ── WHY IT WORKS ── */\n.why-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 48px;\n}\n\n.why-card {\n  background: #fff;\n  border: 1px solid var(--border);\n  border-radius: 14px;\n  padding: 20px;\n}\n\n.why-card-icon { font-size: 20px; margin-bottom: 10px; display: block; }\n\n.why-card-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.01em;\n  margin-bottom: 7px;\n}\n\n.why-card-text { font-size: 13px; color: var(--muted); line-height: 1.65; }\n\n/* ── STEPS ── */\n.steps-section { margin-bottom: 48px; }\n\n.step {\n  display: grid;\n  grid-template-columns: 50px 1fr;\n  gap: 18px;\n  margin-bottom: 4px;\n  position: relative;\n}\n\n.step:not(:last-child)::after {\n  content: '';\n  position: absolute;\n  left: 24px;\n  top: 50px;\n  bottom: -4px;\n  width: 2px;\n  background: var(--border);\n}\n\n.step-num {\n  width: 50px;\n  height: 50px;\n  border-radius: 50%;\n  background: var(--navy);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  z-index: 1;\n}\n\n.step-num-text {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 15px;\n  font-weight: 900;\n  color: var(--gold);\n}\n\n.step-body { padding-top: 10px; padding-bottom: 28px; }\n\n.step-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 15px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.01em;\n  margin-bottom: 8px;\n}\n\n.step-text { font-size: 14px; color: var(--text); line-height: 1.75; }\n.step-text strong { color: var(--navy); font-weight: 600; }\n\n.step-timing {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  margin-top: 10px;\n  background: rgba(27,26,107,.06);\n  border-radius: 99px;\n  padding: 5px 12px;\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--navy);\n}\n\n/* ── PRO TIP ── */\n.pro-tip {\n  background: linear-gradient(135deg, rgba(190,24,93,.07), rgba(190,24,93,.02));\n  border: 1px solid rgba(190,24,93,.2);\n  border-left: 4px solid var(--bakery);\n  border-radius: 0 12px 12px 0;\n  padding: 18px 22px;\n  margin-bottom: 16px;\n}\n\n.pro-tip-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: var(--bakery-dk);\n  margin-bottom: 7px;\n}\n\n.pro-tip-text { font-size: 14px; color: var(--text); line-height: 1.7; }\n\n/* ── MACRO COMPARE ── */\n.macro-section { margin-bottom: 48px; }\n\n.macro-compare {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n}\n\n.macro-col-head {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .08em;\n  text-transform: uppercase;\n  padding: 10px 16px;\n  border-radius: 10px 10px 0 0;\n}\n\n.macro-col-head.original { background: var(--sand); color: var(--muted); }\n.macro-col-head.tandoco { background: var(--navy); color: var(--gold); }\n\n.macro-rows {\n  border: 1px solid var(--border);\n  border-radius: 0 0 12px 12px;\n  overflow: hidden;\n  background: #fff;\n}\n\n.macro-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 12px 16px;\n  border-bottom: 1px solid var(--border);\n  font-size: 14px;\n}\n\n.macro-row:last-child { border-bottom: none; }\n.macro-row.highlighted { background: rgba(190,24,93,.04); }\n\n.macro-label { color: var(--muted); font-size: 13px; }\n.macro-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-weight: 800;\n  color: var(--navy);\n  font-size: 15px;\n  letter-spacing: -.01em;\n}\n\n.macro-val.pink { color: var(--bakery); }\n.macro-val.purple { color: var(--berry); }\n\n/* ── STORAGE ── */\n.storage-row {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 12px;\n  margin-bottom: 48px;\n}\n\n.storage-card {\n  background: var(--sand);\n  border-radius: 12px;\n  padding: 18px;\n  text-align: center;\n}\n\n.storage-card-icon { font-size: 22px; margin-bottom: 8px; display: block; }\n\n.storage-card-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 13px;\n  font-weight: 800;\n  color: var(--navy);\n  margin-bottom: 4px;\n}\n\n.storage-card-text { font-size: 12px; color: var(--muted); line-height: 1.5; }\n\n/* ── DIVIDER ── */\n.divider { height: 1px; background: var(--border); margin: 40px 0; }\n\n/* ── CTA ── */\n.cta-box {\n  background: var(--navy);\n  border-radius: 20px;\n  padding: 44px 40px;\n  text-align: center;\n  position: relative;\n  overflow: hidden;\n}\n\n.cta-box::before {\n  content: '';\n  position: absolute;\n  width: 360px;\n  height: 360px;\n  border-radius: 50%;\n  background: radial-gradient(circle, rgba(190,24,93,.2) 0%, transparent 70%);\n  top: -120px;\n  right: -80px;\n  pointer-events: none;\n}\n\n.cta-eyebrow {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: rgba(200,169,110,.7);\n  margin-bottom: 12px;\n}\n\n.cta-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 26px;\n  font-weight: 900;\n  color: #fff;\n  letter-spacing: -.03em;\n  line-height: 1.15;\n  margin-bottom: 12px;\n}\n\n.cta-text {\n  font-size: 15px;\n  color: rgba(255,255,255,.55);\n  line-height: 1.65;\n  max-width: 420px;\n  margin: 0 auto 28px;\n}\n\n.cta-btn {\n  display: inline-block;\n  background: linear-gradient(135deg, var(--gold), var(--gold-lt));\n  color: #1A1508;\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 800;\n  padding: 14px 34px;\n  border-radius: 99px;\n  text-decoration: none;\n  letter-spacing: -.01em;\n  box-shadow: 0 4px 20px rgba(200,169,110,.3);\n  position: relative;\n  z-index: 1;\n}\n\n/* ── FOOTER ── */\nfooter {\n  border-top: 1px solid var(--border);\n  padding: 22px 32px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  max-width: 760px;\n  margin: 0 auto;\n}\n\n.footer-brand {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 900;\n  color: var(--navy);\n  letter-spacing: -.03em;\n}\n\n.footer-meta { font-size: 12px; color: var(--muted); }\n\n/* ── RESPONSIVE ── */\n@media (max-width: 620px) {\n  nav { padding: 0 20px; }\n  .hero { padding: 48px 20px 44px; }\n  .hero-inner { grid-template-columns: 1fr; }\n  .hero-stats { flex-direction: row; flex-wrap: wrap; }\n  .stat-pill { min-width: 0; flex: 1; }\n  .main { padding: 40px 20px 60px; }\n  .quick-facts { grid-template-columns: repeat(2, 1fr); }\n  .callout-grid { grid-template-columns: 1fr; }\n  .pf-grid { grid-template-columns: 1fr; }\n  .why-grid { grid-template-columns: 1fr; }\n  .macro-compare { grid-template-columns: 1fr; }\n  .storage-row { grid-template-columns: 1fr; }\n  .cta-box { padding: 32px 24px; }\n  footer { flex-direction: column; gap: 6px; text-align: center; padding: 20px; }\n}\n</style>\n</head>\n<body>\n\n<div class=\"top-stripe\"></div>\n\n<nav>\n  <a href=\"https://tandoco.com\" class=\"nav-brand\">tandoco</a>\n  <div class=\"nav-crumb\">\n    <span>bakery</span>\n    <span class=\"nav-crumb-sep\">/</span>\n    <span class=\"nav-crumb-active\">blueberry protein bran muffin</span>\n  </div>\n</nav>\n\n<!-- HERO -->\n<section class=\"hero\">\n  <div class=\"hero-orb orb1\"></div>\n  <div class=\"hero-orb orb2\"></div>\n  <div class=\"hero-inner\">\n    <div class=\"hero-left\">\n      <div class=\"hero-eyebrow\">\n        <div class=\"hero-eyebrow-dot\"></div>\n        <span class=\"hero-eyebrow-text\">protein bakery</span>\n      </div>\n      <h1 class=\"hero-title\">blueberry<br>protein<br><em>bran muffin</em></h1>\n      <p class=\"hero-desc\">sally's classic bran muffin — rebuilt with casein, greek yogurt, and ground flaxseed to hit both protein and fiber goals without turning it into a health food brick.</p>\n      <div class=\"hero-badges\">\n        <span class=\"hero-badge\">🫐 fresh blueberries</span>\n        <span class=\"hero-badge\">💪 high protein</span>\n        <span class=\"hero-badge\">🌾 high fiber</span>\n        <span class=\"hero-badge\">⏱ 30 min</span>\n        <span class=\"hero-badge\">yields 12</span>\n      </div>\n    </div>\n    <div class=\"hero-stats\">\n      <div class=\"stat-pill\">\n        <div class=\"stat-pill-val pink\">12g</div>\n        <div class=\"stat-pill-label\">protein</div>\n      </div>\n      <div class=\"stat-pill\">\n        <div class=\"stat-pill-val gold\">7g</div>\n        <div class=\"stat-pill-label\">fiber</div>\n      </div>\n      <div class=\"stat-pill\">\n        <div class=\"stat-pill-val\">~210</div>\n        <div class=\"stat-pill-label\">calories</div>\n      </div>\n    </div>\n  </div>\n</section>\n<div class=\"cat-stripe\"></div>\n\n<!-- MAIN -->\n<main class=\"main\">\n\n  <!-- QUICK FACTS -->\n  <div class=\"quick-facts\">\n    <div class=\"fact-card\">\n      <div class=\"fact-card-val\">30</div>\n      <div class=\"fact-card-label\">minutes total</div>\n    </div>\n    <div class=\"fact-card\">\n      <div class=\"fact-card-val\">12</div>\n      <div class=\"fact-card-label\">muffins</div>\n    </div>\n    <div class=\"fact-card\">\n      <div class=\"fact-card-val\">425°</div>\n      <div class=\"fact-card-label\">then 350°F</div>\n    </div>\n    <div class=\"fact-card\">\n      <div class=\"fact-card-val\">1 bowl</div>\n      <div class=\"fact-card-label\">no mixer</div>\n    </div>\n  </div>\n\n  <!-- INGREDIENTS -->\n  <div class=\"ingredient-section\">\n    <div class=\"section-label\">ingredients</div>\n    <h2 class=\"section-title\">dry ingredients</h2>\n\n    <table class=\"ing-table\">\n      <thead>\n        <tr>\n          <th>ingredient</th>\n          <th>amount</th>\n          <th>original</th>\n          <th>role</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td class=\"ing-name\">whole wheat flour</td>\n          <td class=\"ing-amount\">¾ cup (90g)</td>\n          <td class=\"ing-orig\">was 1 cup</td>\n          <td class=\"ing-note\">reduced to make room for casein without making batter too dense</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">Nutricoast unflavored casein <span class=\"tag tag-gold\">tandoco protein</span></td>\n          <td class=\"ing-amount\">¼ cup (30g)</td>\n          <td class=\"ing-orig\">new</td>\n          <td class=\"ing-note\">slow-absorbing protein that stays moist — better than whey for baked goods</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">wheat bran <span class=\"tag tag-fiber\">fiber</span></td>\n          <td class=\"ing-amount\">1½ cups (90g)</td>\n          <td class=\"ing-orig\">same</td>\n          <td class=\"ing-note\">the foundation — insoluble fiber, nutty flavor, classic bran texture</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">ground flaxseed <span class=\"tag tag-new\">new</span> <span class=\"tag tag-fiber\">fiber</span></td>\n          <td class=\"ing-amount\">2 tbsp (14g)</td>\n          <td class=\"ing-orig\">new</td>\n          <td class=\"ing-note\">adds soluble fiber + omega-3s. blends invisibly into batter. use golden flax for mildest flavor.</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">baking powder</td>\n          <td class=\"ing-amount\">1 tsp</td>\n          <td class=\"ing-orig\">same</td>\n          <td class=\"ing-note\"></td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">baking soda</td>\n          <td class=\"ing-amount\">1 tsp</td>\n          <td class=\"ing-orig\">same</td>\n          <td class=\"ing-note\"></td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">ground cinnamon</td>\n          <td class=\"ing-amount\">1 tsp</td>\n          <td class=\"ing-orig\">same</td>\n          <td class=\"ing-note\"></td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">fine sea salt</td>\n          <td class=\"ing-amount\">¼ tsp</td>\n          <td class=\"ing-orig\">same</td>\n          <td class=\"ing-note\"></td>\n        </tr>\n      </tbody>\n    </table>\n\n    <div style=\"height:24px;\"></div>\n    <h2 class=\"section-title\">wet ingredients</h2>\n\n    <table class=\"ing-table\">\n      <thead>\n        <tr>\n          <th>ingredient</th>\n          <th>amount</th>\n          <th>original</th>\n          <th>role</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td class=\"ing-name\">eggs</td>\n          <td class=\"ing-amount\">2 large</td>\n          <td class=\"ing-orig\">was 1</td>\n          <td class=\"ing-note\">extra egg adds ~6g protein across the batch and improves structure with the heavier batter</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">plain greek yogurt <span class=\"tag tag-new\">new</span></td>\n          <td class=\"ing-amount\">½ cup (120g)</td>\n          <td class=\"ing-orig\">new</td>\n          <td class=\"ing-note\">replaces some milk — adds ~10g protein to the batch, keeps muffins moist and tender</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">whole milk</td>\n          <td class=\"ing-amount\">¼ cup (60ml)</td>\n          <td class=\"ing-orig\">was ¾ cup</td>\n          <td class=\"ing-note\">reduced because greek yogurt replaces most of the liquid. don't skip it entirely.</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">unsweetened applesauce</td>\n          <td class=\"ing-amount\">½ cup (120g)</td>\n          <td class=\"ing-orig\">same</td>\n          <td class=\"ing-note\">moisture and natural sweetness. the reason these muffins aren't dry.</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">honey</td>\n          <td class=\"ing-amount\">3 tbsp</td>\n          <td class=\"ing-orig\">was ¼ cup</td>\n          <td class=\"ing-note\">slightly reduced — greek yogurt and blueberries add natural sweetness</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">coconut oil, melted</td>\n          <td class=\"ing-amount\">2 tbsp</td>\n          <td class=\"ing-orig\">same</td>\n          <td class=\"ing-note\">fat for moisture and crumb tenderness. don't remove it.</td>\n        </tr>\n        <tr>\n          <td class=\"ing-name\">vanilla extract</td>\n          <td class=\"ing-amount\">1 tsp</td>\n          <td class=\"ing-orig\">same</td>\n          <td class=\"ing-note\"></td>\n        </tr>\n      </tbody>\n    </table>\n\n    <div style=\"height:24px;\"></div>\n    <h2 class=\"section-title\">fold-ins</h2>\n\n    <table class=\"ing-table\">\n      <thead>\n        <tr>\n          <th>ingredient</th>\n          <th>amount</th>\n          <th>note</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td class=\"ing-name\">fresh blueberries</td>\n          <td class=\"ing-amount\">1 cup (150g)</td>\n          <td class=\"ing-note\">fresh preferred. if using frozen, do not thaw — fold in straight from frozen to prevent bleeding.</td>\n        </tr>\n      </tbody>\n    </table>\n\n    <div style=\"height:12px;\"></div>\n    <div class=\"table-note\">\n      <span class=\"table-note-icon\">⚖️</span>\n      <span>casein absorbs liquid differently than flour — the batter will look thicker than Sally's original. that's correct. don't add extra milk to thin it out; it will bake correctly as-is.</span>\n    </div>\n  </div>\n\n  <!-- PROTEIN + FIBER BREAKDOWN -->\n  <div class=\"section-label\">where it comes from</div>\n  <h2 class=\"section-title\">protein + fiber by source</h2>\n  <div class=\"pf-grid\" style=\"margin-bottom:48px;\">\n    <div class=\"pf-card\">\n      <div class=\"pf-card-head protein\">protein per muffin (est.)</div>\n      <div class=\"pf-sources\">\n        <div class=\"pf-source\">\n          <span class=\"pf-source-name\">Nutricoast casein (¼ cup)</span>\n          <span class=\"pf-source-val pink\">~4g</span>\n        </div>\n        <div class=\"pf-source\">\n          <span class=\"pf-source-name\">greek yogurt (½ cup)</span>\n          <span class=\"pf-source-val pink\">~4g</span>\n        </div>\n        <div class=\"pf-source\">\n          <span class=\"pf-source-name\">2 eggs</span>\n          <span class=\"pf-source-val pink\">~2g</span>\n        </div>\n        <div class=\"pf-source\">\n          <span class=\"pf-source-name\">wheat bran + whole wheat flour</span>\n          <span class=\"pf-source-val pink\">~2g</span>\n        </div>\n      </div>\n      <div class=\"pf-total\">\n        <span class=\"pf-total-label\">total</span>\n        <span class=\"pf-total-val pink\">~12g</span>\n      </div>\n    </div>\n    <div class=\"pf-card\">\n      <div class=\"pf-card-head fiber\">fiber per muffin (est.)</div>\n      <div class=\"pf-sources\">\n        <div class=\"pf-source\">\n          <span class=\"pf-source-name\">wheat bran (1½ cups)</span>\n          <span class=\"pf-source-val purple\">~4g</span>\n        </div>\n        <div class=\"pf-source\">\n          <span class=\"pf-source-name\">ground flaxseed (2 tbsp)</span>\n          <span class=\"pf-source-val purple\">~1.5g</span>\n        </div>\n        <div class=\"pf-source\">\n          <span class=\"pf-source-name\">whole wheat flour (¾ cup)</span>\n          <span class=\"pf-source-val purple\">~1g</span>\n        </div>\n        <div class=\"pf-source\">\n          <span class=\"pf-source-name\">blueberries (1 cup)</span>\n          <span class=\"pf-source-val purple\">~0.5g</span>\n        </div>\n      </div>\n      <div class=\"pf-total\">\n        <span class=\"pf-total-label\">total</span>\n        <span class=\"pf-total-val purple\">~7g</span>\n      </div>\n    </div>\n  </div>\n\n  <!-- WHY IT WORKS -->\n  <div class=\"section-label\">ingredient logic</div>\n  <h2 class=\"section-title\" style=\"margin-bottom:16px;\">why each swap works</h2>\n  <div class=\"why-grid\">\n    <div class=\"why-card\">\n      <span class=\"why-card-icon\">🥛</span>\n      <div class=\"why-card-title\">casein over whey</div>\n      <div class=\"why-card-text\">whey is fast-absorbing and thin — it makes baked goods rubbery and wet. casein is slow-absorbing and thick-mixing, which is exactly what a muffin batter needs. it holds moisture during the bake without making the crumb gummy.</div>\n    </div>\n    <div class=\"why-card\">\n      <span class=\"why-card-icon\">🥣</span>\n      <div class=\"why-card-title\">greek yogurt as liquid</div>\n      <div class=\"why-card-text\">swapping most of the milk for greek yogurt cuts volume while adding protein and fat. the acidity also reacts with baking soda for a better rise. full-fat or 2% yogurt gives the best crumb — non-fat works but can make muffins slightly denser.</div>\n    </div>\n    <div class=\"why-card\">\n      <span class=\"why-card-icon\">🌱</span>\n      <div class=\"why-card-title\">flaxseed for soluble fiber</div>\n      <div class=\"why-card-text\">wheat bran is almost entirely insoluble fiber — great for digestion, less great for satiety. ground flaxseed adds soluble fiber, which slows digestion and keeps you full longer. 2 tbsp vanishes into the batter with no texture impact and only a mild nutty flavor.</div>\n    </div>\n    <div class=\"why-card\">\n      <span class=\"why-card-icon\">🫐</span>\n      <div class=\"why-card-title\">blueberries, not raisins</div>\n      <div class=\"why-card-text\">sally's original calls for raisins. blueberries give you antioxidants, a burst of juice in every bite, and lower added sugar. fresh blueberries make a meaningfully better muffin than frozen — use them when you can. fold gently at the very end.</div>\n    </div>\n  </div>\n\n  <div class=\"divider\"></div>\n\n  <!-- METHOD -->\n  <div class=\"steps-section\">\n    <div class=\"section-label\">method</div>\n    <h2 class=\"section-title\">how to make it</h2>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">01</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">preheat and prep</div>\n        <div class=\"step-text\">preheat oven to <strong>425°F (218°C)</strong>. line a standard 12-count muffin pan with paper liners or spray with nonstick spray. the high initial temp is what gives these muffins their domed top — don't skip it.</div>\n        <div class=\"step-timing\">⏱ 10 min preheat</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">02</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">mix the dry ingredients</div>\n        <div class=\"step-text\">whisk together in a large bowl: whole wheat flour, casein, wheat bran, ground flaxseed, baking powder, baking soda, cinnamon, and salt. whisk well — casein can clump, so make sure it's fully distributed through the dry mix before the wet ingredients go in.</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">03</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">mix the wet ingredients</div>\n        <div class=\"step-text\">in a medium bowl, whisk together the eggs, greek yogurt, milk, applesauce, honey, melted coconut oil, and vanilla until fully smooth. the yogurt may resist at first — keep whisking. the batter will be thicker than you'd expect from a standard muffin recipe. that's the casein and yogurt doing their job.</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">04</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">combine — do not overmix</div>\n        <div class=\"step-text\">pour the wet ingredients into the dry and fold with a rubber spatula until <strong>just combined</strong>. a few streaks of flour are fine — they'll hydrate during the rest. overmixing at this stage develops gluten and makes muffins tough. switch to gentle folding as soon as no dry clumps remain.</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">05</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">fold in blueberries</div>\n        <div class=\"step-text\">add the blueberries and fold in with 3–4 gentle strokes. if using frozen, add straight from the freezer — thawing first causes them to bleed and turns the batter purple. fresh blueberries can be tossed in 1 tsp of flour before folding to help them suspend in the batter rather than sinking.</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">06</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">fill and bake — two-temperature method</div>\n        <div class=\"step-text\">divide batter evenly across the 12 cups, filling each <strong>all the way to the top</strong>. the high batter and high initial temp are what create that tall, domed bakery-style top. bake at <strong>425°F for 5 minutes</strong>, then — without opening the oven — reduce the temperature to <strong>350°F (177°C)</strong>. bake for an additional <strong>14–16 minutes</strong> until a toothpick inserted in the center comes out clean.</div>\n        <div class=\"step-timing\">⏱ 5 min at 425° + 14–16 min at 350°</div>\n      </div>\n    </div>\n\n    <div class=\"step\">\n      <div class=\"step-num\"><span class=\"step-num-text\">07</span></div>\n      <div class=\"step-body\">\n        <div class=\"step-title\">cool before eating</div>\n        <div class=\"step-text\">let muffins cool in the pan for 5 minutes, then transfer to a wire rack. casein-enriched baked goods continue to set as they cool — eating them straight from the oven can make them taste gummy. give them 10–15 minutes and the texture firms up significantly.</div>\n        <div class=\"step-timing\">⏱ 10–15 min cool time</div>\n      </div>\n    </div>\n\n  </div>\n\n  <!-- PRO TIPS -->\n  <div class=\"pro-tip\" style=\"margin-bottom:12px;\">\n    <div class=\"pro-tip-label\">pro tip — browning</div>\n    <div class=\"pro-tip-text\">casein contains milk proteins that brown faster than flour. watch your muffins at the 12-minute mark of the second bake. if the tops look dark, tent loosely with foil. a clean toothpick is your real doneness signal.</div>\n  </div>\n\n  <div class=\"pro-tip\" style=\"margin-bottom:48px;\">\n    <div class=\"pro-tip-label\">pro tip — tall muffin tops</div>\n    <div class=\"pro-tip-text\">the combination of filling cups to the top, starting at 425°F, and not opening the oven door for the first 5 minutes is what creates that tall, cracked, bakery-style dome. resist the urge to check early.</div>\n  </div>\n\n  <!-- MACRO COMPARE -->\n  <div class=\"macro-section\">\n    <div class=\"section-label\">nutrition</div>\n    <h2 class=\"section-title\">per muffin (1 of 12) — estimated</h2>\n    <div class=\"macro-compare\">\n      <div>\n        <div class=\"macro-col-head original\">sally's original</div>\n        <div class=\"macro-rows\">\n          <div class=\"macro-row\">\n            <span class=\"macro-label\">protein</span>\n            <span class=\"macro-val\">~4g</span>\n          </div>\n          <div class=\"macro-row\">\n            <span class=\"macro-label\">fiber</span>\n            <span class=\"macro-val\">~4g</span>\n          </div>\n          <div class=\"macro-row\">\n            <span class=\"macro-label\">calories</span>\n            <span class=\"macro-val\">~150</span>\n          </div>\n          <div class=\"macro-row\">\n            <span class=\"macro-label\">carbs</span>\n            <span class=\"macro-val\">~28g</span>\n          </div>\n        </div>\n      </div>\n      <div>\n        <div class=\"macro-col-head tandoco\">tandoco version</div>\n        <div class=\"macro-rows\">\n          <div class=\"macro-row highlighted\">\n            <span class=\"macro-label\">protein</span>\n            <span class=\"macro-val pink\">~12g</span>\n          </div>\n          <div class=\"macro-row highlighted\">\n            <span class=\"macro-label\">fiber</span>\n            <span class=\"macro-val purple\">~7g</span>\n          </div>\n          <div class=\"macro-row highlighted\">\n            <span class=\"macro-label\">calories</span>\n            <span class=\"macro-val\">~210</span>\n          </div>\n          <div class=\"macro-row highlighted\">\n            <span class=\"macro-label\">carbs</span>\n            <span class=\"macro-val\">~24g</span>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div style=\"height:12px;\"></div>\n    <div class=\"table-note\">\n      <span class=\"table-note-icon\">📊</span>\n      <span>estimates based on USDA nutrition data and Nutricoast casein label. actual macros vary by exact brand of greek yogurt, milk fat %, and blueberry weight. use a food scale and log your specific brands for precision tracking.</span>\n    </div>\n  </div>\n\n  <!-- STORAGE -->\n  <div class=\"section-label\">storage</div>\n  <h2 class=\"section-title\">keeping them fresh</h2>\n  <div class=\"storage-row\">\n    <div class=\"storage-card\">\n      <span class=\"storage-card-icon\">🗃️</span>\n      <div class=\"storage-card-title\">counter</div>\n      <div class=\"storage-card-text\">airtight container, up to 3 days. place a paper towel under the muffins to absorb moisture.</div>\n    </div>\n    <div class=\"storage-card\">\n      <span class=\"storage-card-icon\">❄️</span>\n      <div class=\"storage-card-title\">fridge</div>\n      <div class=\"storage-card-text\">up to 1 week. the higher protein content means these keep better cold than standard muffins.</div>\n    </div>\n    <div class=\"storage-card\">\n      <span class=\"storage-card-icon\">🧊</span>\n      <div class=\"storage-card-title\">freezer</div>\n      <div class=\"storage-card-text\">up to 3 months. wrap individually, thaw overnight in fridge, or microwave 45–60 seconds straight from frozen.</div>\n    </div>\n  </div>\n\n  <div class=\"divider\"></div>\n\n  <!-- CTA -->\n  <div class=\"cta-box\">\n    <div class=\"cta-eyebrow\">made in minneapolis</div>\n    <div class=\"cta-title\">want us to do the baking?</div>\n    <div class=\"cta-text\">scratch-made, high-protein bakery and weekly meal prep. real ingredients, no shortcuts. orders close thursday, pickup sunday.</div>\n    <a href=\"https://tandoco.com/store\" class=\"cta-btn\">see this week's menu →</a>\n  </div>\n\n</main>\n\n<footer>\n  <div class=\"footer-brand\">tandoco</div>\n  <div class=\"footer-meta\">hello@tandoco.com · tandoco.com · @tandocohq</div>\n</footer>\n\n</body>\n</html>","availableNextWeek":false,"supplies":[],"dietaryTags":[],"photos":[],"name":"the bran-dit muffin","fiber":"7","sortOrder":7,"menuDescription":"12g protein. 7g fiber. antioxidant-rich blueberries. wheat bran. made from scratch in minneapolis. the bran-dit muffin is the ultimate way to start your mornings and kickstart your gains.","updatedAt":{"_seconds":1775679191,"_nanoseconds":736000000}},{"id":"Kka5f9K2PQjJTNSM5reF","carbs":"","fat":"","notes":"","linkedProjectId":"","createdAt":{"_seconds":1774578149,"_nanoseconds":950000000},"skuBase":"TDC-0007","weeklySpecial":false,"fiber":"","nutritionTags":[],"menuIngredients":"","instructionsHtml":"","sodium":"","hideCalories":false,"cholesterol":"","fanFavorite":false,"satFat":"","nextAvailableDate":"","sugar":"","sellQty":3,"servingsPerBatch":10,"mealType":"Bakery","ingredients":[],"menuCategory":"Bakery","owner":"tommy","createdByName":"Tommy","dietaryTags":[],"photos":[],"published":true,"availableThisWeek":true,"category":"Approved","photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FKka5f9K2PQjJTNSM5reF%2F1775360830549_Brownies.png?alt=media&token=a415f386-15f1-48dd-a1c6-177b313ddb9e","protein":"15","calories":"250","servingSize":"1 brownie","packOptions":[{"qty":4,"label":"4","price":4.99},{"qty":6,"label":"6","price":6.99},{"qty":10,"label":"10","price":10.99}],"menuPrice":"9.99","menuDescription":"Fudgy, dense, and deeply chocolate. these aren't protein bars pretending to be brownies,  they're real brownies that happen to hit your macros. made from scratch with whole ingredients, no fillers, nothing you can't pronounce. the kind of thing you eat and then check the label twice because it doesn't add up.","thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FKka5f9K2PQjJTNSM5reF%2F1775360830549_Brownies_thumb_400w.webp?alt=media","availableNextWeek":false,"supplies":[],"name":"built brownie","updatedAt":{"_seconds":1775520789,"_nanoseconds":301000000},"sortOrder":4},{"id":"KxdTPR7IvHTTphUrCqMm","category":"Ideation","mealType":"Entrée","protein":"52","calories":"480","carbs":"18","fat":"22","satFat":"","cholesterol":"","sodium":"","fiber":"","sugar":"","nutritionTags":[],"instructionsHtml":"","weeklySpecial":false,"fanFavorite":false,"hideCalories":false,"packOptions":[],"nextAvailableDate":"","menuPrice":"11","menuCategory":"","owner":"omar","linkedProjectId":"","createdByName":"Omar Yusuf","createdAt":{"_seconds":1775319485,"_nanoseconds":307000000},"photos":[],"availableNextWeek":false,"notes":"","menuDescription":"beef & sausage meatballs 90/10 beef. italian sausage. scratch san marzano marinara. chickapea penne. hand-rolled or ground depending on the week. always 53g protein. always gluten-free.","published":true,"availableThisWeek":true,"sortOrder":1,"name":"beef & sausage meatballs","packMins":0,"activeMins":0,"supplies":[{"supplyId":"FDvZuV0n5gnfmmouvfmP","name":"Parchment paper","qty":1,"unit":"each","costPerUnit":0.05}],"ingredients":[{"id":"","name":"Baking Powder","qty":2,"unit":"g","costPerUnit":0,"currentStock":0,"restockThreshold":0,"libraryId":""}],"photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FKxdTPR7IvHTTphUrCqMm%2F1776396491450_240206_spicy-penne-vodka-meatballs-21.jpg?alt=media&token=02cccdad-8b09-4056-b6db-a7b20737786f","thumbURL":"","dietaryTags":["Contains Eggs","Contains Milk","Contains Wheat"],"menuIngredients":"","servingSize":"","updatedAt":{"_seconds":1776428719,"_nanoseconds":839000000}},{"id":"LyXHpBhh3guXibmPbuTx","servings":1,"macros":{"calories":0,"protein":18,"carbs":0,"fat":0,"fiber":0},"feedback":[],"createdAt":{"_seconds":1774392079,"_nanoseconds":806000000},"description":"High protein gooey cinnamon rolls","servingSize":"1 roll","status":"approved","instructions":"I. Ingredients\nDough:\n• Whole Milk (110°F): 1.25 cups\n• Active Dry Yeast: 7g (1 packet)\n• Granulated Sugar: 1/2 cup + 2 tbsp\n• Melted Butter: 1/2 cup\n• Eggs: 2 large (room temp)\n• Vanilla Extract: 2 tsp\n• Salt: 1 tsp\n• Nutmeg: 1/2 tsp\n• Bread Flour: 3 cups\n• Casein Protein: 1.5 cups\nFilling (Paste Method):\n• Butter: 1 cup\n• Brown Sugar: 2 cups\n• Cinnamon: 4 tbsp\n• AP Flour: 1.5 tbsp\nPour-Over:\n• Heavy Cream: 1/2 cup\n• Casein: 1 tbsp\n• Vanilla: 1/2 tsp\n• Sugar: 1 tsp\nFrosting:\n• Cream Cheese: 6 oz\n• Butter: 1/4 cup\n• Casein: 1/2 scoop\n• Powdered Sugar: 1.5 cups\n• Vanilla: 2 tsp\n• Pinch Salt\nII. Step-by-Step Instructions\n1. Bloom yeast in warm milk + 1 tbsp sugar for 10 minutes until foamy.\n2. Mix in remaining sugar, butter, eggs, vanilla, salt, nutmeg.\n3. Add flour + casein and knead 5–7 minutes.\n4. Stop when smooth. Do not over-knead.\n5. Let dough rise 90 minutes covered.\n6. Mix filling into spreadable paste.\n7. Roll dough to 24x15 inches.\n8. Spread filling edge-to-edge.\n9. Roll tightly from long side.\n10. Cut into 12 rolls (~2 inches).\n11. Place in pan and rise 30 minutes.\n12. Add cream pour-over.\n13. Bake at 350°F for 22–26 minutes.\n14. Frost half while hot, rest after 10 minutes.\nIII. Key Technique Tips\n• Do not over-knead (casein changes gluten behavior)\n• Tight roll = better structure\n• Paste filling prevents leaks\n• Do not overbake (protein dries fast)\n• Double frosting creates premium texture","createdByName":"Tommy","carbs":"","linkedProjectId":"","fat":"","category":"Approved","protein":"18","published":true,"nextAvailableDate":"2026-04-05","sodium":"","fiber":"","cholesterol":"","satFat":"","nutritionTags":[],"menuIngredients":"","availableThisWeek":true,"sugar":"","mealType":"Bakery","menuCategory":"Bakery","weeklySpecial":false,"hideCalories":true,"calories":"700","fanFavorite":true,"notes":"","menuDescription":"this is the one that started it all. gooey, rich, and packed with protein — our cinnamon rolls are proof that eating clean doesn't mean giving up the things you love. tommy built this recipe from scratch because he refused to choose between progress and flavor. real ingredients. real macros. zero guilt","packOptions":[{"qty":1,"label":"single","price":6.99},{"qty":4,"label":"4 pack","price":24.99},{"qty":8,"label":"8 pack","price":35.99}],"menuPrice":"6.99","servingsPerBatch":12,"skuBase":"TDC-0016","sellQty":1,"owner":"tommy","instructionsHtml":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>protein cinnamon rolls — tandoco</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,400;0,600;0,700;0,800;0,900;1,700&family=Inter:wght@300;400;500;600&display=swap\" rel=\"stylesheet\">\n<style>\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n:root {\n  --navy:    #1B1A6B;\n  --navy-dk: #12114A;\n  --navy-lt: #2D2FA8;\n  --gold:    #C8A96E;\n  --gold-lt: #E8C87A;\n  --cream:   #FAF8F3;\n  --sand:    #EDE8DC;\n  --muted:   #6B6B7B;\n  --border:  #E0DBCF;\n  --text:    #1A1A2E;\n  --bakery:  #be185d;\n}\n\nhtml { font-size: 16px; scroll-behavior: smooth; }\n\nbody {\n  font-family: 'Inter', sans-serif;\n  background: var(--cream);\n  color: var(--text);\n  -webkit-font-smoothing: antialiased;\n}\n\n/* ── TOP BAR ── */\n.topbar {\n  height: 4px;\n  background: linear-gradient(90deg, var(--navy) 0%, var(--navy-lt) 55%, var(--gold) 100%);\n}\n\n/* ── NAV ── */\nnav {\n  background: var(--cream);\n  border-bottom: 1px solid var(--border);\n  padding: 0 40px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  height: 56px;\n  position: sticky;\n  top: 0;\n  z-index: 100;\n}\n\n.nav-wordmark {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 20px;\n  font-weight: 900;\n  color: var(--navy);\n  letter-spacing: -.04em;\n  text-decoration: none;\n}\n\n.nav-links {\n  display: flex;\n  gap: 28px;\n  list-style: none;\n}\n\n.nav-links a {\n  font-size: 13px;\n  font-weight: 500;\n  color: var(--muted);\n  text-decoration: none;\n  transition: color .15s;\n}\n\n.nav-links a:hover { color: var(--navy); }\n\n.nav-badge {\n  background: var(--bakery);\n  color: #fff;\n  font-size: 10px;\n  font-weight: 800;\n  letter-spacing: .06em;\n  text-transform: uppercase;\n  padding: 4px 10px;\n  border-radius: 99px;\n}\n\n/* ── HERO ── */\n.hero {\n  background: var(--navy);\n  padding: 72px 40px 60px;\n  position: relative;\n  overflow: hidden;\n}\n\n.hero-orb {\n  position: absolute;\n  border-radius: 50%;\n  pointer-events: none;\n}\n\n.hero-orb-1 {\n  width: 600px; height: 600px;\n  background: radial-gradient(circle, rgba(200,169,110,.07) 0%, transparent 70%);\n  top: -200px; right: -100px;\n}\n\n.hero-orb-2 {\n  width: 400px; height: 400px;\n  background: radial-gradient(circle, rgba(45,47,168,.3) 0%, transparent 70%);\n  bottom: -150px; left: -80px;\n}\n\n.hero-inner {\n  max-width: 800px;\n  margin: 0 auto;\n  position: relative;\n}\n\n.hero-eyebrow {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 20px;\n}\n\n.hero-badge {\n  background: var(--bakery);\n  color: #fff;\n  font-size: 10px;\n  font-weight: 800;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  padding: 5px 12px;\n  border-radius: 99px;\n}\n\n.hero-category {\n  font-size: 12px;\n  font-weight: 500;\n  color: rgba(255,255,255,.4);\n  letter-spacing: .06em;\n}\n\n.hero-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: clamp(42px, 7vw, 72px);\n  font-weight: 900;\n  color: #fff;\n  letter-spacing: -.04em;\n  line-height: .95;\n  margin-bottom: 20px;\n}\n\n.hero-title span { color: var(--gold); }\n\n.hero-sub {\n  font-size: 15px;\n  color: rgba(255,255,255,.55);\n  line-height: 1.65;\n  max-width: 480px;\n  margin-bottom: 32px;\n}\n\n.hero-stats {\n  display: flex;\n  gap: 0;\n  border: 1px solid rgba(255,255,255,.1);\n  border-radius: 12px;\n  overflow: hidden;\n  width: fit-content;\n}\n\n.hero-stat {\n  padding: 14px 24px;\n  border-right: 1px solid rgba(255,255,255,.1);\n  display: flex;\n  flex-direction: column;\n  gap: 3px;\n}\n\n.hero-stat:last-child { border-right: none; }\n\n.hero-stat-val {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 20px;\n  font-weight: 900;\n  color: var(--gold);\n  letter-spacing: -.03em;\n}\n\n.hero-stat-label {\n  font-size: 10px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: .08em;\n  color: rgba(255,255,255,.35);\n}\n\n/* ── ALERT BOX ── */\n.alert-wrap {\n  max-width: 800px;\n  margin: 0 auto;\n  padding: 0 40px;\n}\n\n.alert {\n  margin: 32px 0 0;\n  background: #FFF8EC;\n  border: 1px solid #F0D49A;\n  border-left: 4px solid var(--gold);\n  border-radius: 10px;\n  padding: 16px 20px;\n}\n\n.alert-title {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .08em;\n  text-transform: uppercase;\n  color: #92650A;\n  margin-bottom: 6px;\n}\n\n.alert-text {\n  font-size: 13px;\n  color: #5C4007;\n  line-height: 1.6;\n}\n\n/* ── MAIN LAYOUT ── */\n.main {\n  max-width: 800px;\n  margin: 0 auto;\n  padding: 48px 40px 80px;\n  display: grid;\n  grid-template-columns: 1fr 280px;\n  gap: 48px;\n  align-items: start;\n}\n\n/* ── SECTION LABEL ── */\n.section-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .12em;\n  text-transform: uppercase;\n  color: var(--gold);\n  margin-bottom: 14px;\n}\n\n/* ── INGREDIENT GROUPS ── */\n.ingredient-group {\n  margin-bottom: 28px;\n}\n\n.ingredient-group-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 13px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.01em;\n  padding-bottom: 10px;\n  border-bottom: 1px solid var(--border);\n  margin-bottom: 12px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.group-dot {\n  width: 6px; height: 6px;\n  border-radius: 50%;\n  background: var(--gold);\n  flex-shrink: 0;\n}\n\n.ingredient-item {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  padding: 7px 0;\n  border-bottom: 1px solid rgba(0,0,0,.04);\n  gap: 12px;\n}\n\n.ingredient-item:last-child { border-bottom: none; }\n\n.ing-name {\n  font-size: 14px;\n  color: var(--text);\n  font-weight: 400;\n}\n\n.ing-amount {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 13px;\n  font-weight: 700;\n  color: var(--navy);\n  white-space: nowrap;\n  flex-shrink: 0;\n}\n\n/* ── STEPS ── */\n.steps { list-style: none; }\n\n.step {\n  display: flex;\n  gap: 20px;\n  margin-bottom: 28px;\n  position: relative;\n}\n\n.step::before {\n  content: '';\n  position: absolute;\n  left: 19px;\n  top: 42px;\n  bottom: -28px;\n  width: 1px;\n  background: var(--border);\n}\n\n.step:last-child::before { display: none; }\n\n.step-num-wrap {\n  flex-shrink: 0;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n\n.step-num {\n  width: 38px; height: 38px;\n  border-radius: 50%;\n  background: var(--navy);\n  color: #fff;\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 900;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  letter-spacing: -.02em;\n}\n\n.step.highlighted .step-num {\n  background: var(--gold);\n  color: var(--navy-dk);\n}\n\n.step-body { flex: 1; padding-top: 6px; }\n\n.step-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 15px;\n  font-weight: 800;\n  color: var(--navy);\n  letter-spacing: -.02em;\n  margin-bottom: 6px;\n}\n\n.step-text {\n  font-size: 14px;\n  color: var(--muted);\n  line-height: 1.65;\n}\n\n.step-text strong {\n  color: var(--navy);\n  font-weight: 600;\n}\n\n.step-timer {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  background: rgba(27,26,107,.06);\n  border-radius: 6px;\n  padding: 4px 10px;\n  font-size: 11px;\n  font-weight: 600;\n  color: var(--navy);\n  margin-top: 8px;\n}\n\n.timer-dot {\n  width: 6px; height: 6px;\n  border-radius: 50%;\n  background: var(--navy-lt);\n}\n\n/* ── SIDEBAR ── */\n.sidebar { position: sticky; top: 72px; }\n\n.sidebar-card {\n  background: #fff;\n  border: 1px solid var(--border);\n  border-radius: 16px;\n  overflow: hidden;\n  margin-bottom: 16px;\n}\n\n.sidebar-card-header {\n  background: var(--navy);\n  padding: 16px 20px;\n}\n\n.sidebar-card-title {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 13px;\n  font-weight: 800;\n  color: #fff;\n  letter-spacing: -.01em;\n}\n\n.sidebar-card-body { padding: 16px 20px; }\n\n.tip-item {\n  display: flex;\n  gap: 10px;\n  padding: 8px 0;\n  border-bottom: 1px solid rgba(0,0,0,.05);\n  align-items: flex-start;\n}\n\n.tip-item:last-child { border-bottom: none; }\n\n.tip-icon {\n  width: 20px; height: 20px;\n  border-radius: 5px;\n  background: rgba(200,169,110,.15);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  font-size: 11px;\n  margin-top: 1px;\n}\n\n.tip-text {\n  font-size: 12px;\n  color: var(--muted);\n  line-height: 1.55;\n}\n\n.tip-text strong { color: var(--navy); font-weight: 600; }\n\n.fix-item {\n  display: flex;\n  gap: 10px;\n  padding: 7px 0;\n  border-bottom: 1px solid rgba(0,0,0,.05);\n  align-items: flex-start;\n}\n\n.fix-item:last-child { border-bottom: none; }\n\n.fix-check {\n  width: 16px; height: 16px;\n  border-radius: 4px;\n  background: #F0FDF4;\n  border: 1px solid #86EFAC;\n  color: #16A34A;\n  font-size: 9px;\n  font-weight: 900;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  margin-top: 1px;\n}\n\n.fix-text {\n  font-size: 12px;\n  color: #166534;\n  line-height: 1.5;\n}\n\n.order-cta {\n  background: linear-gradient(135deg, var(--gold), var(--gold-lt));\n  border-radius: 12px;\n  padding: 20px;\n  text-align: center;\n}\n\n.order-cta-headline {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 900;\n  color: var(--navy-dk);\n  letter-spacing: -.02em;\n  margin-bottom: 6px;\n}\n\n.order-cta-sub {\n  font-size: 11px;\n  color: rgba(27,26,107,.65);\n  line-height: 1.5;\n  margin-bottom: 14px;\n}\n\n.order-btn {\n  display: block;\n  background: var(--navy);\n  color: #fff;\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 13px;\n  font-weight: 800;\n  padding: 11px 0;\n  border-radius: 8px;\n  text-decoration: none;\n  letter-spacing: -.01em;\n  transition: background .15s;\n}\n\n.order-btn:hover { background: var(--navy-lt); }\n\n/* ── FOOTER ── */\nfooter {\n  border-top: 1px solid var(--border);\n  padding: 28px 40px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.footer-brand {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 16px;\n  font-weight: 900;\n  color: var(--navy);\n  letter-spacing: -.04em;\n}\n\n.footer-meta {\n  font-size: 12px;\n  color: var(--muted);\n}\n\n/* ── ANIMATIONS ── */\n@keyframes fadeUp {\n  from { opacity: 0; transform: translateY(16px); }\n  to   { opacity: 1; transform: translateY(0); }\n}\n\n.hero-inner > * {\n  animation: fadeUp .5s ease both;\n}\n\n.hero-eyebrow { animation-delay: .05s; }\n.hero-title   { animation-delay: .12s; }\n.hero-sub     { animation-delay: .18s; }\n.hero-stats   { animation-delay: .24s; }\n\n@media (max-width: 700px) {\n  .main { grid-template-columns: 1fr; padding: 32px 20px 60px; }\n  .sidebar { position: static; }\n  .hero { padding: 48px 20px 40px; }\n  nav { padding: 0 20px; }\n  .nav-links { display: none; }\n  .alert-wrap { padding: 0 20px; }\n  footer { padding: 20px; flex-direction: column; gap: 8px; text-align: center; }\n}\n</style>\n</head>\n<body>\n\n<div class=\"topbar\"></div>\n\n<nav>\n  <a class=\"nav-wordmark\" href=\"https://tandoco.com\">tandoco</a>\n  <ul class=\"nav-links\">\n    <li><a href=\"https://tandoco.com\">home</a></li>\n    <li><a href=\"https://tandoco.com/store\">menu</a></li>\n    <li><a href=\"https://tandoco.com/blog\">blog</a></li>\n    <li><a href=\"https://tandoco.com/about\">about</a></li>\n  </ul>\n  <span class=\"nav-badge\">bakery</span>\n</nav>\n\n<div class=\"hero\">\n  <div class=\"hero-orb hero-orb-1\"></div>\n  <div class=\"hero-orb hero-orb-2\"></div>\n  <div class=\"hero-inner\">\n    <div class=\"hero-eyebrow\">\n      <span class=\"hero-badge\">protein bakery</span>\n      <span class=\"hero-category\">tandoco · minneapolis</span>\n    </div>\n    <h1 class=\"hero-title\">protein<br><span>cinnamon rolls.</span></h1>\n    <p class=\"hero-sub\">real ingredients, made from scratch. high-protein dough, no fillers, no shortcuts. this is the roll we wished existed.</p>\n    <div class=\"hero-stats\">\n      <div class=\"hero-stat\">\n        <div class=\"hero-stat-val\">12</div>\n        <div class=\"hero-stat-label\">rolls</div>\n      </div>\n      <div class=\"hero-stat\">\n        <div class=\"hero-stat-val\">350°</div>\n        <div class=\"hero-stat-label\">temp</div>\n      </div>\n      <div class=\"hero-stat\">\n        <div class=\"hero-stat-val\">~3 hrs</div>\n        <div class=\"hero-stat-label\">total time</div>\n      </div>\n      <div class=\"hero-stat\">\n        <div class=\"hero-stat-val\">casein</div>\n        <div class=\"hero-stat-label\">protein source</div>\n      </div>\n    </div>\n  </div>\n</div>\n\n<div class=\"alert-wrap\">\n  <div class=\"alert\">\n    <div class=\"alert-title\">recipe update — sogginess fix applied</div>\n    <div class=\"alert-text\">filling cut in half from the original. pour-over reduced to ¼ cup. additional technique notes added throughout to address moisture pooling. if you made these before, this version is the one.</div>\n  </div>\n</div>\n\n<div class=\"main\">\n\n  <!-- LEFT: STEPS + INGREDIENTS -->\n  <div>\n\n    <!-- INGREDIENTS -->\n    <div class=\"section-label\">ingredients</div>\n\n    <div class=\"ingredient-group\">\n      <div class=\"ingredient-group-title\"><span class=\"group-dot\"></span>dough</div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">whole milk (110°F)</span><span class=\"ing-amount\">1¼ cups</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">active dry yeast</span><span class=\"ing-amount\">7g (1 packet)</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">granulated sugar</span><span class=\"ing-amount\">½ cup + 2 tbsp</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">melted butter</span><span class=\"ing-amount\">½ cup</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">eggs, room temp</span><span class=\"ing-amount\">2 large</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">vanilla extract</span><span class=\"ing-amount\">2 tsp</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">salt</span><span class=\"ing-amount\">1 tsp</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">nutmeg</span><span class=\"ing-amount\">½ tsp</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">bread flour</span><span class=\"ing-amount\">3 cups</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">casein protein</span><span class=\"ing-amount\">1½ cups</span></div>\n    </div>\n\n    <div class=\"ingredient-group\">\n      <div class=\"ingredient-group-title\"><span class=\"group-dot\"></span>filling <span style=\"font-size:11px;font-weight:500;color:var(--bakery);background:rgba(190,24,93,.08);padding:2px 8px;border-radius:99px;letter-spacing:.04em;\">½ original</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">butter</span><span class=\"ing-amount\">½ cup</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">brown sugar</span><span class=\"ing-amount\">1 cup</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">cinnamon</span><span class=\"ing-amount\">2 tbsp</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">AP flour (binder)</span><span class=\"ing-amount\">¾ tbsp</span></div>\n    </div>\n\n    <div class=\"ingredient-group\">\n      <div class=\"ingredient-group-title\"><span class=\"group-dot\"></span>pour-over</div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">heavy cream</span><span class=\"ing-amount\">¼ cup</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">casein</span><span class=\"ing-amount\">½ tbsp</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">vanilla</span><span class=\"ing-amount\">¼ tsp</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">sugar</span><span class=\"ing-amount\">½ tsp</span></div>\n    </div>\n\n    <div class=\"ingredient-group\">\n      <div class=\"ingredient-group-title\"><span class=\"group-dot\"></span>cream cheese frosting</div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">cream cheese</span><span class=\"ing-amount\">6 oz</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">butter</span><span class=\"ing-amount\">¼ cup</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">casein (½ scoop)</span><span class=\"ing-amount\">~15g</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">powdered sugar</span><span class=\"ing-amount\">1½ cups</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">vanilla</span><span class=\"ing-amount\">2 tsp</span></div>\n      <div class=\"ingredient-item\"><span class=\"ing-name\">salt</span><span class=\"ing-amount\">pinch</span></div>\n    </div>\n\n    <!-- STEPS -->\n    <div class=\"section-label\" style=\"margin-top:48px;\">method</div>\n\n    <ol class=\"steps\">\n\n      <li class=\"step highlighted\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">1</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">bloom the yeast</div>\n          <div class=\"step-text\">Combine warm milk and 1 tbsp sugar in your mixing bowl. Sprinkle in the yeast and let sit until foamy. <strong>If it doesn't foam, your milk was too hot or the yeast is dead — start over.</strong> Don't skip this check.</div>\n          <div class=\"step-timer\"><span class=\"timer-dot\"></span>10 minutes</div>\n        </div>\n      </li>\n\n      <li class=\"step\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">2</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">build the dough</div>\n          <div class=\"step-text\">Add remaining sugar, melted butter, eggs, vanilla, salt, and nutmeg to the yeast mixture. Mix until combined. Add bread flour and casein together and mix in gradually — don't dump it all at once.</div>\n        </div>\n      </li>\n\n      <li class=\"step highlighted\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">3</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">knead — stop early</div>\n          <div class=\"step-text\">Knead 5–7 minutes until smooth. <strong>Stop as soon as it comes together.</strong> Casein tightens gluten faster than flour alone — over-kneading leads to a dense, dry crumb.</div>\n          <div class=\"step-timer\"><span class=\"timer-dot\"></span>5–7 minutes</div>\n        </div>\n      </li>\n\n      <li class=\"step\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">4</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">first rise</div>\n          <div class=\"step-text\">Cover and rise at room temp for 90 minutes until doubled. <strong>Pro move:</strong> refrigerate overnight after this rise. Cold dough is firmer, rolls tighter, and releases far less moisture in the oven.</div>\n          <div class=\"step-timer\"><span class=\"timer-dot\"></span>90 minutes</div>\n        </div>\n      </li>\n\n      <li class=\"step highlighted\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">5</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">make the filling paste — keep it cool</div>\n          <div class=\"step-text\">Mix butter, brown sugar, cinnamon, and AP flour into a thick spreadable paste. <strong>The AP flour is the key</strong> — it binds butter and sugar so it doesn't fully liquefy and pool during baking. Keep the paste cool before applying; warm paste soaks into the dough before rolling even begins.</div>\n        </div>\n      </li>\n\n      <li class=\"step\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">6</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">roll and fill</div>\n          <div class=\"step-text\">Roll dough to 24×15 inches on a lightly floured surface. Spread filling edge-to-edge, but <strong>leave a 1-inch bare border on the far long edge</strong> so the seam seals cleanly. Thin, even layer — don't pile it in the center.</div>\n        </div>\n      </li>\n\n      <li class=\"step highlighted\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">7</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">roll tight and cut clean</div>\n          <div class=\"step-text\">Roll tightly from the long side toward the bare edge. <strong>A loose roll = air pockets = sogginess.</strong> Cut into 12 rolls (~2 inches each) using unflavored dental floss or a sharp serrated knife. Press and pull — never saw.</div>\n        </div>\n      </li>\n\n      <li class=\"step\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">8</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">pan with space, second rise</div>\n          <div class=\"step-text\">Place rolls cut-side up in a lightly greased pan. <strong>Leave space between each roll</strong> — crowding traps steam and causes a soggy bottom. Rise 30 minutes uncovered.</div>\n          <div class=\"step-timer\"><span class=\"timer-dot\"></span>30 minutes</div>\n        </div>\n      </li>\n\n      <li class=\"step highlighted\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">9</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">add pour-over — go light</div>\n          <div class=\"step-text\">Whisk heavy cream, casein, vanilla, and sugar. Drizzle <strong>around</strong> the rolls, not over the top of them. If sogginess was severe last time, reduce this pour-over by a third or skip it this batch and add back once you're happy with the base texture.</div>\n        </div>\n      </li>\n\n      <li class=\"step\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">10</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">bake — pull early</div>\n          <div class=\"step-text\">Bake at 350°F for 22–26 minutes. Pull when tops are <strong>just golden</strong> — don't wait for deep brown. Casein overbakes faster than all-flour doughs, and the filling will continue to liquefy the longer it sits in a hot pan after baking.</div>\n          <div class=\"step-timer\"><span class=\"timer-dot\"></span>22–26 minutes at 350°F</div>\n        </div>\n      </li>\n\n      <li class=\"step highlighted\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">11</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">rest before frosting</div>\n          <div class=\"step-text\">Let rolls rest in the pan for <strong>10 minutes</strong> before any frosting hits them. This lets excess moisture escape and the filling re-set. Frosting immediately traps steam under the layer and undoes all your work.</div>\n          <div class=\"step-timer\"><span class=\"timer-dot\"></span>10 minutes rest</div>\n        </div>\n      </li>\n\n      <li class=\"step\">\n        <div class=\"step-num-wrap\"><div class=\"step-num\">12</div></div>\n        <div class=\"step-body\">\n          <div class=\"step-title\">make and apply frosting</div>\n          <div class=\"step-text\">Beat cream cheese and butter until smooth. Mix in casein, powdered sugar, vanilla, and a pinch of salt. Apply after the rest — or split the batch: frost half immediately for a melty finish, hold the rest 10 more minutes for a thicker set.</div>\n        </div>\n      </li>\n\n    </ol>\n\n  </div>\n\n  <!-- RIGHT: SIDEBAR -->\n  <div class=\"sidebar\">\n\n    <div class=\"sidebar-card\">\n      <div class=\"sidebar-card-header\">\n        <div class=\"sidebar-card-title\">sogginess fixes</div>\n      </div>\n      <div class=\"sidebar-card-body\">\n        <div class=\"fix-item\"><div class=\"fix-check\">✓</div><div class=\"fix-text\">filling cut in half — 1 cup butter, 1 cup brown sugar</div></div>\n        <div class=\"fix-item\"><div class=\"fix-check\">✓</div><div class=\"fix-text\">AP flour in filling binds the butter/sugar — don't skip it</div></div>\n        <div class=\"fix-item\"><div class=\"fix-check\">✓</div><div class=\"fix-text\">pour-over reduced to ¼ cup — drizzle around, not on top</div></div>\n        <div class=\"fix-item\"><div class=\"fix-check\">✓</div><div class=\"fix-text\">space between rolls in pan — lets steam escape</div></div>\n        <div class=\"fix-item\"><div class=\"fix-check\">✓</div><div class=\"fix-text\">rest 10 min before frosting — never frost straight out of the oven</div></div>\n      </div>\n    </div>\n\n    <div class=\"sidebar-card\">\n      <div class=\"sidebar-card-header\" style=\"background: #12114A;\">\n        <div class=\"sidebar-card-title\">casein tips</div>\n      </div>\n      <div class=\"sidebar-card-body\">\n        <div class=\"tip-item\">\n          <div class=\"tip-icon\">↓</div>\n          <div class=\"tip-text\"><strong>stop kneading early.</strong> casein tightens gluten faster than flour — overdoing it dries out the crumb.</div>\n        </div>\n        <div class=\"tip-item\">\n          <div class=\"tip-icon\">⏱</div>\n          <div class=\"tip-text\"><strong>pull at 22 min.</strong> protein bakes dry faster than all-flour doughs. check early, check often.</div>\n        </div>\n        <div class=\"tip-item\">\n          <div class=\"tip-icon\">❄</div>\n          <div class=\"tip-text\"><strong>overnight cold rise.</strong> refrigerating after the first proof = tighter roll, less moisture in the oven.</div>\n        </div>\n        <div class=\"tip-item\">\n          <div class=\"tip-icon\">✂</div>\n          <div class=\"tip-text\"><strong>use dental floss to cut.</strong> cleaner slice, no compression, better layers.</div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"order-cta\">\n      <div class=\"order-cta-headline\">want our protein cinnamon rolls?</div>\n      <div class=\"order-cta-sub\">we make these fresh every week. orders close thursday at midnight. pickup sunday in minneapolis.</div>\n      <a class=\"order-btn\" href=\"https://tandoco.com/store\">order this week →</a>\n    </div>\n\n  </div>\n\n</div>\n\n<footer>\n  <div class=\"footer-brand\">tandoco</div>\n  <div class=\"footer-meta\">minneapolis, mn · hello@tandoco.com · tandoco.com</div>\n</footer>\n\n</body>\n</html>","ingredients":[],"dietaryTags":[],"availableNextWeek":false,"photos":["https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FLyXHpBhh3guXibmPbuTx%2F1775503803143_Unknown-2.jpeg?alt=media&token=8c0550c0-144e-4cd3-aa2d-feeef5d4b3bb"],"sortOrder":2,"supplies":[],"name":"swole roll","updatedAt":{"_seconds":1775585578,"_nanoseconds":563000000},"photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FLyXHpBhh3guXibmPbuTx%2F1775585578645_Untitled%20(4.75%20x%203.25%20in)%20(1500%20x%201000%20px).png?alt=media&token=0173349c-4614-48e4-a8f2-9d74c7c3edf4"},{"id":"maxJOwkOg1OY3ocYit6x","name":"date night doolsho","category":"Ideation","servingSize":"","calories":"","carbs":"","fat":"","satFat":"","cholesterol":"","sodium":"","fiber":"","sugar":"","nutritionTags":[],"menuIngredients":"","ingredients":[],"supplies":[],"notes":"","instructionsHtml":"","published":true,"weeklySpecial":false,"fanFavorite":false,"hideCalories":false,"nextAvailableDate":"","menuPrice":"","menuCategory":"Bakery","owner":"tommy","linkedProjectId":"","createdByName":"Tommy","createdAt":{"_seconds":1775682299,"_nanoseconds":95000000},"photos":[],"mealType":"Bakery","availableThisWeek":true,"protein":"15","packOptions":[{"qty":1,"label":"single mini-bundt cake","price":4.99},{"qty":4,"label":"4 mini-bundt cakes","price":16.99},{"qty":1,"label":"large bundt cake","price":21.99}],"menuDescription":"just like your hooyo makes. a somali classic, made to hit your macros. cardamom sponge, date swirl, cream cheese drizzle. 100% halal, scratch-made, high-protein. no shortcuts.","photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FmaxJOwkOg1OY3ocYit6x%2F1776393890027_Screenshot%202026-04-16%20at%209.44.16%E2%80%AFPM.png?alt=media&token=b8513e51-b6a8-4777-ba69-f01ed4e53767","dietaryTags":["Halal"],"updatedAt":{"_seconds":1776446429,"_nanoseconds":652000000}},{"id":"mm5yd1s0D9WAq1MfShcT","name":"Chocolate Peanut Butter Smoothie","category":"Ideation","servingSize":"","carbs":"0","fat":"0","satFat":"","cholesterol":"","sodium":"","fiber":"","sugar":"","nutritionTags":[],"menuIngredients":"","ingredients":[],"notes":"","published":true,"availableThisWeek":true,"nextAvailableDate":"","menuPrice":"6.99","menuDescription":"","linkedProjectId":"","createdByName":"Omar Yusuf","createdAt":{"_seconds":1774808770,"_nanoseconds":390000000},"protein":"40","calories":"300","photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2Fmm5yd1s0D9WAq1MfShcT%2F1774808819748_IMG_4277.jpeg?alt=media&token=96a604cd-66fd-494e-919d-3e9ce6d31eee","mealType":"Smoothie","menuCategory":"Smoothie","updatedAt":{"_seconds":1774935671,"_nanoseconds":734000000},"skuBase":"TDC-0006","thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2Fmm5yd1s0D9WAq1MfShcT%2F1774808819748_IMG_4277_thumb_400w.webp?alt=media","sortOrder":9},{"id":"qOWylLaLU1NCUMzUMNRb","name":"Protein Vanilla Ice Cream","category":"Ideation","mealType":"Bakery","servingSize":"","protein":"","calories":"","carbs":"","fat":"","satFat":"","cholesterol":"","sodium":"","fiber":"","sugar":"","nutritionTags":[],"menuIngredients":"","ingredients":[],"notes":"","nextAvailableDate":"","linkedProjectId":"","createdByName":"Tommy","createdAt":{"_seconds":1774826838,"_nanoseconds":646000000},"weeklySpecial":false,"menuDescription":"protein-packed and creamy, this ice cream is perfect for cooling down on a hot day. availble in 8oz single serves or pints","fanFavorite":false,"packOptions":[{"qty":4,"label":"4 pack - 8oz single serves","price":8.99},{"qty":1,"label":"1  pint","price":4.99},{"qty":4,"label":"4 pints","price":25.99}],"menuPrice":"1.99","hideCalories":true,"menuCategory":"Bakery","published":true,"photoURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FqOWylLaLU1NCUMzUMNRb%2F1774894797978_vanilla-ice-cream-FT-RECIPE0324-cebca493f53c4431a0049ea65bfb4796.jpg?alt=media&token=62e52a3c-01d5-4798-9cc3-fe3eb6094fdc","availableThisWeek":false,"updatedAt":{"_seconds":1774935671,"_nanoseconds":734000000},"skuBase":"TDC-0003","thumbURL":"https://firebasestorage.googleapis.com/v0/b/tandoco.firebasestorage.app/o/recipe-photos%2FqOWylLaLU1NCUMzUMNRb%2F1774894797978_vanilla-ice-cream-FT-RECIPE0324-cebca493f53c4431a0049ea65bfb4796_thumb_400w.webp?alt=media","sortOrder":11}],"ts":1776573713526}