TinyShield Email 1 — abandoned checkout, three design directions

Each column: desktop render at 50% width, phone render at 50% width, then that direction's QC output verbatim. All three ran through the email-slicer pipeline (render → slice → assemble → qc). Every slice boundary landed on a safe cut with no WARNING.

A. Editorial type

Olipop "Unleashing the Fizz" / Herman Miller — headline-as-visual on cream

Desktop (600px)
Direction A desktop render
Phone (375px)
Direction A phone render
QC output
== slice ==
cut 1 ('header' -> 'hero-type'): nominal y=81.0css/162px, safe row=162px (81.0css), offset=0px
cut 2 ('hero-type' -> 'photo'): nominal y=948.8css/1898px, safe row=1897px (948.5css), offset=-1px
slice 01 'header': 1200x162px (600x81css) 6300 bytes JPG
slice 02 'hero-type': 1200x1735px (600x868css) 136653 bytes JPG
slice 03 'photo': 1200x1649px (600x824css) 250619 bytes JPG
total: 393572 bytes across 3 slices

== assemble ==
assemble: wrote email.html (6564 bytes, 6.4KB)

== qc ==
[PASS] html bytes < 60KB - 6564 bytes
[PASS] every slice file exists
[PASS] every slice < 250KB
[PASS] total slice bytes < 1.5MB - 393572 bytes
[PASS] every <img> has non-empty alt - 3 images
[PASS] live text chars >= 300 - 381 chars
[PASS] at least one live <a> matches /checkout|shop|claim|cart/i - matched: "Finish Checkout"
QC: ALL PASS

B. Color block

Magic Spoon — teal wave into full-bleed photo, type set into the sky

Desktop (600px)
Direction B desktop render
Phone (375px)
Direction B phone render
QC output
== slice ==
cut 1 ('header-wave' -> 'checks-button'): nominal y=778.0css/1556px, safe row=1556px (778.0css), offset=0px
cut 2 ('checks-button' -> 'twins'): nominal y=1217.4css/2435px, safe row=2433px (1216.5css), offset=-2px
slice 01 'header-wave': 1200x1556px (600x778css) 211457 bytes JPG
slice 02 'checks-button': 1200x877px (600x438css) 70821 bytes JPG
slice 03 'twins': 1200x841px (600x420css) 116080 bytes JPG
total: 398358 bytes across 3 slices

== assemble ==
assemble: wrote email.html (6703 bytes, 6.5KB)

== qc ==
[PASS] html bytes < 60KB - 6703 bytes
[PASS] every slice file exists
[PASS] every slice < 250KB
[PASS] total slice bytes < 1.5MB - 398358 bytes
[PASS] every <img> has non-empty alt - 3 images
[PASS] live text chars >= 300 - 381 chars
[PASS] at least one live <a> matches /checkout|shop|claim|cart/i - matched: "Finish Checkout"
QC: ALL PASS

C. Dark native

Liquid Death / Seed — teal-darker field top to bottom, torn receipt card

Desktop (600px)
Direction C desktop render
Phone (375px)
Direction C phone render
QC output
== slice ==
cut 1 ('header-type' -> 'receipt-button'): nominal y=551.5css/1103px, safe row=1103px (551.5css), offset=0px
cut 2 ('receipt-button' -> 'grid'): nominal y=1108.5css/2217px, safe row=2217px (1108.5css), offset=0px
slice 01 'header-type': 1200x1103px (600x552css) 85990 bytes JPG
slice 02 'receipt-button': 1200x1114px (600x557css) 88861 bytes JPG
slice 03 'grid': 1200x911px (600x456css) 156219 bytes JPG
total: 331070 bytes across 3 slices

== assemble ==
assemble: wrote email.html (6659 bytes, 6.5KB)

== qc ==
[PASS] html bytes < 60KB - 6659 bytes
[PASS] every slice file exists
[PASS] every slice < 250KB
[PASS] total slice bytes < 1.5MB - 331070 bytes
[PASS] every <img> has non-empty alt - 3 images
[PASS] live text chars >= 300 - 381 chars
[PASS] at least one live <a> matches /checkout|shop|claim|cart/i - matched: "Finish Checkout"
QC: ALL PASS