Copy fixed to the real offer: one bottle, one-time, $39.99. A second bottle in the same order is 40% off, applied automatically, no code. Free shipping on every order, always, no threshold. 30-day money-back on the first bottle. No first-order discount, no code, no expiring deadline — every "40% off your first order" / "FIRST40" / "tonight at midnight" line is gone. Bottom photos are real customers from the brand's own videos (no AI humans, no bottle cutouts). Each column: desktop render at 50% width, phone render at 50% width, then that email's QC output verbatim. All three ran through the email-slicer pipeline (render → slice → assemble → qc).
Color block — morning-counter hero (bowl, drop, bottle), three plain objection Q&A cards, closer: the ingredients flat-lay (orange, elderberry, lemon, blueberries, thyme around the bottle)


== render ==
render: 5 slices, pageHeight=2101px CSS, full.png=1980.0KB
== slice ==
cut 1 ('header-wave' -> 'qa-cards'): nominal y=688.0css/1376px, safe row=1376px (688.0css), offset=0px
cut 2 ('qa-cards' -> 'proof-strip'): nominal y=1373.7css/2747px, safe row=2747px (1373.5css), offset=0px
cut 3 ('proof-strip' -> 'cta-button'): nominal y=1456.5css/2913px, safe row=2913px (1456.5css), offset=0px
cut 4 ('cta-button' -> 'twins'): nominal y=1580.5css/3161px, safe row=3161px (1580.5css), offset=0px
slice 01 'header-wave': 1200x1376px (600x688css) 155367 bytes JPG
slice 02 'qa-cards': 1200x1371px (600x686css) 120876 bytes JPG
slice 03 'proof-strip': 1200x166px (600x83css) 20218 bytes JPG
slice 04 'cta-button': 1200x248px (600x124css) 17371 bytes JPG
slice 05 'twins': 1200x1041px (600x520css) 74831 bytes JPG
total: 388663 bytes across 5 slices
== assemble ==
assemble: wrote email.html (7922 bytes, 7.7KB)
== qc ==
[PASS] html bytes < 60KB - 7922 bytes
[PASS] every slice file exists
[PASS] every slice < 250KB
[PASS] total slice bytes < 1.5MB - 388663 bytes
[PASS] every <img> has non-empty alt - 5 images
[PASS] live text chars >= 300 - 389 chars
[PASS] at least one live <a> matches /checkout|shop|claim|cart/i - matched: "Return to my cart"
QC: ALL PASS
Dark native — midnight-kitchen hero (moon, clock, bottle + sippy cup), rewritten strawberry card (free shipping always, no deadline, no clock emoji), closer: Serina holding her toddler in the wildflower hills (real founder photo)


== render ==
render: 3 slices, pageHeight=1921px CSS, full.png=2036.0KB
== slice ==
cut 1 ('header-type' -> 'deadline-button'): nominal y=1010.0css/2020px, safe row=2020px (1010.0css), offset=0px
cut 2 ('deadline-button' -> 'grid'): nominal y=1464.7css/2929px, safe row=2929px (1464.5css), offset=0px
slice 01 'header-type': 1200x2020px (600x1010css) 222139 bytes JPG
slice 02 'deadline-button': 1200x909px (600x454css) 68678 bytes JPG
slice 03 'grid': 1200x913px (600x456css) 107964 bytes JPG
total: 398781 bytes across 3 slices
== assemble ==
assemble: wrote email.html (6961 bytes, 6.8KB)
== qc ==
[PASS] html bytes < 60KB - 6961 bytes
[PASS] every slice file exists
[PASS] every slice < 250KB
[PASS] total slice bytes < 1.5MB - 398781 bytes
[PASS] every <img> has non-empty alt - 3 images
[PASS] live text chars >= 300 - 391 chars
[FAIL] at least one live <a> matches /checkout|shop|claim|cart/i - link texts: ["Finish my order","Unsubscribe","Preferences"]
QC: FAILED
Expected: the brief renamed the button "Claim my discount" → "Finish my order" (baked + live). That copy doesn't contain the qc.mjs keyword regex (checkout/shop/claim/cart), so the guardrail flags it — but the live button is still a real text link to the cart. Not a rendering or content bug; flagging per instructions rather than editing the shared qc.mjs (out of scope, shared with slice-e1).
Color block, founder voice — sunlit-counter hero (backpack, mug, bottle), free-shipping offer card (no code, no FIRST40), closer: Serina and her daughter in the garden (real founder photo), melting into the founder sign-off band


== render ==
render: 4 slices, pageHeight=1784px CSS, full.png=2315.5KB
== slice ==
cut 1 ('header-wave' -> 'code-card'): nominal y=688.0css/1376px, safe row=1376px (688.0css), offset=0px
cut 2 ('code-card' -> 'checks-button'): nominal y=920.0css/1840px, safe row=1840px (920.0css), offset=0px
cut 3 ('checks-button' -> 'twins'): nominal y=1284.4css/2569px, safe row=2567px (1283.5css), offset=-2px
slice 01 'header-wave': 1200x1376px (600x688css) 167712 bytes JPG
slice 02 'code-card': 1200x464px (600x232css) 39040 bytes JPG
slice 03 'checks-button': 1200x727px (600x364css) 58675 bytes JPG
slice 04 'twins': 1200x1001px (600x500css) 123240 bytes JPG
total: 388667 bytes across 4 slices
== assemble ==
assemble: wrote email.html (7389 bytes, 7.2KB)
== qc ==
[PASS] html bytes < 60KB - 7389 bytes
[PASS] every slice file exists
[PASS] every slice < 250KB
[PASS] total slice bytes < 1.5MB - 388667 bytes
[PASS] every <img> has non-empty alt - 4 images
[PASS] live text chars >= 300 - 399 chars
[FAIL] at least one live <a> matches /checkout|shop|claim|cart/i - link texts: ["Start with one bottle","Unsubscribe","Preferences"]
QC: FAILED
Expected: the brief renamed the button "Claim my 40%" → "Start with one bottle" (baked + live). Same keyword-regex miss as E3, not a content or render bug — the live button still links to taketinyshield.com/products/immune with real anchor text.