@clay-design-system/email 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build/placeholder.d.ts +79 -0
- package/dist/build/placeholder.d.ts.map +1 -0
- package/dist/build/placeholder.js +148 -0
- package/dist/build/placeholder.js.map +1 -0
- package/dist/build/visual-resolver.d.ts +18 -1
- package/dist/build/visual-resolver.d.ts.map +1 -1
- package/dist/build/visual-resolver.js +67 -3
- package/dist/build/visual-resolver.js.map +1 -1
- package/dist/catalog.json +1 -1
- package/dist/emails/section-list-action-items.html +4 -4
- package/package.json +4 -2
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Labelled email placeholder generator (K10 EM-2).
|
|
3
|
+
*
|
|
4
|
+
* An unresolved image slot (visual-resolver.ts status 'placeholder') needs a visible stand-in while
|
|
5
|
+
* the real asset is sourced. The shared `assets/placeholders/*.svg` tiles are blank and painted
|
|
6
|
+
* #e6e7ea, which is not on the approved placeholder tint list, and SVG doesn't render in Outlook or
|
|
7
|
+
* Gmail <img>. This module draws a **labelled** placeholder on an **approved tint** and writes it as
|
|
8
|
+
* a 2× PNG campaign asset, so `email:upload` can host it like any other campaign image.
|
|
9
|
+
*
|
|
10
|
+
* The tint list mirrors `policy.email.color-system.image-placeholder-background-colors`
|
|
11
|
+
* (19-email-color-system.md § Image Placeholder Background Colors); kb:test checks the two agree.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* pnpm --filter @clay-design-system/email email:placeholder -- \
|
|
15
|
+
* --label="A monday board built from a template" --size=560x320 \
|
|
16
|
+
* [--tint=cool-grey|warm-cream|pale-blue|pale-lavender|pale-green|black] [--hero] [--scale=2] \
|
|
17
|
+
* --out=<abs path>/src/assets/<campaign>/<name>.png (or .svg for the vector source)
|
|
18
|
+
*/
|
|
19
|
+
/** The approved placeholder background tints, in the order the colour-system policy lists them. */
|
|
20
|
+
export declare const PLACEHOLDER_TINTS: {
|
|
21
|
+
readonly 'cool-grey': {
|
|
22
|
+
readonly hex: "#f3f4f5";
|
|
23
|
+
readonly use: "Default — safe for any content type";
|
|
24
|
+
};
|
|
25
|
+
readonly 'warm-cream': {
|
|
26
|
+
readonly hex: "#f7f3ea";
|
|
27
|
+
readonly use: "Warm-tinted sections (surfaceWarm)";
|
|
28
|
+
};
|
|
29
|
+
readonly 'pale-blue': {
|
|
30
|
+
readonly hex: "#eff5fd";
|
|
31
|
+
readonly use: "Conference, webinar, event imagery";
|
|
32
|
+
};
|
|
33
|
+
readonly 'pale-lavender': {
|
|
34
|
+
readonly hex: "#d9d7ff";
|
|
35
|
+
readonly use: "Creative/design feature sections";
|
|
36
|
+
};
|
|
37
|
+
readonly 'pale-green': {
|
|
38
|
+
readonly hex: "#ceead6";
|
|
39
|
+
readonly use: "Sustainability, success, governance imagery";
|
|
40
|
+
};
|
|
41
|
+
readonly black: {
|
|
42
|
+
readonly hex: "#000000";
|
|
43
|
+
readonly use: "Dark/dramatic hero image placeholder (above-fold hero only)";
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export type PlaceholderTint = keyof typeof PLACEHOLDER_TINTS;
|
|
47
|
+
export interface PlaceholderOptions {
|
|
48
|
+
/** Display width in px (the column the image sits in, e.g. 560). */
|
|
49
|
+
width: number;
|
|
50
|
+
/** Display height in px. */
|
|
51
|
+
height: number;
|
|
52
|
+
/** What the real image will show — printed on the tile, so a reviewer knows what's missing. */
|
|
53
|
+
label: string;
|
|
54
|
+
/** Default 'cool-grey'. */
|
|
55
|
+
tint?: PlaceholderTint;
|
|
56
|
+
/** The slot is the above-fold hero — the only slot that may use the black tint. */
|
|
57
|
+
hero?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/** Greedy word wrap to `maxChars` per line, at most `maxLines` lines (the last one ellipsised). */
|
|
60
|
+
export declare function wrapLabel(label: string, maxChars: number, maxLines: number): string[];
|
|
61
|
+
/** Validates the options; throws on anything the colour-system policy doesn't allow. */
|
|
62
|
+
export declare function checkPlaceholderOptions(opts: PlaceholderOptions): Required<PlaceholderOptions>;
|
|
63
|
+
/** The labelled placeholder as an SVG string at display size (the PNG renders it at `scale`×). */
|
|
64
|
+
export declare function placeholderSvg(opts: PlaceholderOptions): string;
|
|
65
|
+
/** Writes the placeholder: `.svg` → the vector source; anything else → a `scale`× PNG (via sharp). */
|
|
66
|
+
export declare function writePlaceholder(opts: PlaceholderOptions & {
|
|
67
|
+
out: string;
|
|
68
|
+
scale?: number;
|
|
69
|
+
}): Promise<{
|
|
70
|
+
out: string;
|
|
71
|
+
width: number;
|
|
72
|
+
height: number;
|
|
73
|
+
}>;
|
|
74
|
+
/** `--label=… --size=560x320 --tint=… --hero --scale=2 --out=…` → options. */
|
|
75
|
+
export declare function parsePlaceholderArgs(argv: string[]): PlaceholderOptions & {
|
|
76
|
+
out: string;
|
|
77
|
+
scale?: number;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=placeholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../src/build/placeholder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,mGAAmG;AACnG,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CAOpB,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,iBAAiB,CAAA;AAE5D,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,KAAK,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,mFAAmF;IACnF,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAQD,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBrF;AAED,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAa9F;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAwB/D;AAED,sGAAsG;AACtG,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB1J;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgBzG"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Labelled email placeholder generator (K10 EM-2).
|
|
3
|
+
*
|
|
4
|
+
* An unresolved image slot (visual-resolver.ts status 'placeholder') needs a visible stand-in while
|
|
5
|
+
* the real asset is sourced. The shared `assets/placeholders/*.svg` tiles are blank and painted
|
|
6
|
+
* #e6e7ea, which is not on the approved placeholder tint list, and SVG doesn't render in Outlook or
|
|
7
|
+
* Gmail <img>. This module draws a **labelled** placeholder on an **approved tint** and writes it as
|
|
8
|
+
* a 2× PNG campaign asset, so `email:upload` can host it like any other campaign image.
|
|
9
|
+
*
|
|
10
|
+
* The tint list mirrors `policy.email.color-system.image-placeholder-background-colors`
|
|
11
|
+
* (19-email-color-system.md § Image Placeholder Background Colors); kb:test checks the two agree.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* pnpm --filter @clay-design-system/email email:placeholder -- \
|
|
15
|
+
* --label="A monday board built from a template" --size=560x320 \
|
|
16
|
+
* [--tint=cool-grey|warm-cream|pale-blue|pale-lavender|pale-green|black] [--hero] [--scale=2] \
|
|
17
|
+
* --out=<abs path>/src/assets/<campaign>/<name>.png (or .svg for the vector source)
|
|
18
|
+
*/
|
|
19
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
20
|
+
import { dirname, resolve } from 'node:path';
|
|
21
|
+
import { pathToFileURL } from 'node:url';
|
|
22
|
+
import { emailColor, emailType } from '../generated/email-tokens';
|
|
23
|
+
/** The approved placeholder background tints, in the order the colour-system policy lists them. */
|
|
24
|
+
export const PLACEHOLDER_TINTS = {
|
|
25
|
+
'cool-grey': { hex: emailColor.page, use: 'Default — safe for any content type' },
|
|
26
|
+
'warm-cream': { hex: emailColor.surfaceWarm, use: 'Warm-tinted sections (surfaceWarm)' },
|
|
27
|
+
'pale-blue': { hex: '#eff5fd', use: 'Conference, webinar, event imagery' },
|
|
28
|
+
'pale-lavender': { hex: '#d9d7ff', use: 'Creative/design feature sections' },
|
|
29
|
+
'pale-green': { hex: '#ceead6', use: 'Sustainability, success, governance imagery' },
|
|
30
|
+
black: { hex: emailColor.pageDark, use: 'Dark/dramatic hero image placeholder (above-fold hero only)' },
|
|
31
|
+
};
|
|
32
|
+
const MAX_LABEL = 120;
|
|
33
|
+
function escapeXml(s) {
|
|
34
|
+
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
35
|
+
}
|
|
36
|
+
/** Greedy word wrap to `maxChars` per line, at most `maxLines` lines (the last one ellipsised). */
|
|
37
|
+
export function wrapLabel(label, maxChars, maxLines) {
|
|
38
|
+
const words = label.trim().split(/\s+/);
|
|
39
|
+
const lines = [];
|
|
40
|
+
let cur = '';
|
|
41
|
+
for (const w of words) {
|
|
42
|
+
const next = cur ? `${cur} ${w}` : w;
|
|
43
|
+
if (next.length <= maxChars || !cur)
|
|
44
|
+
cur = next;
|
|
45
|
+
else {
|
|
46
|
+
lines.push(cur);
|
|
47
|
+
cur = w;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (cur)
|
|
51
|
+
lines.push(cur);
|
|
52
|
+
if (lines.length <= maxLines)
|
|
53
|
+
return lines;
|
|
54
|
+
const kept = lines.slice(0, maxLines);
|
|
55
|
+
kept[maxLines - 1] = `${kept[maxLines - 1].replace(/[.,;:]?$/, '')}…`;
|
|
56
|
+
return kept;
|
|
57
|
+
}
|
|
58
|
+
/** Validates the options; throws on anything the colour-system policy doesn't allow. */
|
|
59
|
+
export function checkPlaceholderOptions(opts) {
|
|
60
|
+
const tint = opts.tint ?? 'cool-grey';
|
|
61
|
+
if (!(tint in PLACEHOLDER_TINTS)) {
|
|
62
|
+
throw new Error(`Unknown placeholder tint "${tint}" — use one of ${Object.keys(PLACEHOLDER_TINTS).join(', ')} (policy.email.color-system.image-placeholder-background-colors)`);
|
|
63
|
+
}
|
|
64
|
+
if (tint === 'black' && !opts.hero)
|
|
65
|
+
throw new Error('The black placeholder tint is for the above-fold hero only — pass hero: true (--hero), or use a pale tint');
|
|
66
|
+
for (const [k, v] of [['width', opts.width], ['height', opts.height]]) {
|
|
67
|
+
if (!Number.isInteger(v) || v < 16 || v > 1280)
|
|
68
|
+
throw new Error(`Placeholder ${k} must be an integer display size in px (16–1280), got ${v}`);
|
|
69
|
+
}
|
|
70
|
+
const label = opts.label?.trim() ?? '';
|
|
71
|
+
if (!label)
|
|
72
|
+
throw new Error('A placeholder needs a label: say what the real image will show');
|
|
73
|
+
if (label.length > MAX_LABEL)
|
|
74
|
+
throw new Error(`Placeholder label is ${label.length} chars; keep it ≤${MAX_LABEL}`);
|
|
75
|
+
return { width: opts.width, height: opts.height, label, tint, hero: !!opts.hero };
|
|
76
|
+
}
|
|
77
|
+
/** The labelled placeholder as an SVG string at display size (the PNG renders it at `scale`×). */
|
|
78
|
+
export function placeholderSvg(opts) {
|
|
79
|
+
const { width, height, label, tint } = checkPlaceholderOptions(opts);
|
|
80
|
+
const bg = PLACEHOLDER_TINTS[tint].hex;
|
|
81
|
+
const ink = tint === 'black' ? emailColor.textDark : emailColor.textMuted;
|
|
82
|
+
const fontSize = Math.max(12, Math.min(24, Math.round(Math.min(width, height) / 12)));
|
|
83
|
+
const sizeFont = Math.max(10, Math.round(fontSize * 0.7));
|
|
84
|
+
const lineHeight = Math.round(fontSize * 1.3);
|
|
85
|
+
const maxChars = Math.max(8, Math.floor((width * 0.84) / (fontSize * 0.56)));
|
|
86
|
+
const maxLines = Math.max(1, Math.floor((height * 0.7 - sizeFont * 1.6) / lineHeight));
|
|
87
|
+
const lines = wrapLabel(label, maxChars, maxLines);
|
|
88
|
+
const blockH = lines.length * lineHeight + sizeFont * 1.6;
|
|
89
|
+
const top = (height - blockH) / 2 + fontSize;
|
|
90
|
+
const family = escapeXml(emailType.family);
|
|
91
|
+
const text = lines
|
|
92
|
+
.map((l, i) => `<text x="${width / 2}" y="${(top + i * lineHeight).toFixed(1)}" text-anchor="middle" font-family="${family}" font-size="${fontSize}" font-weight="600" fill="${ink}">${escapeXml(l)}</text>`)
|
|
93
|
+
.join('');
|
|
94
|
+
const sizeY = (top + lines.length * lineHeight + sizeFont * 0.4).toFixed(1);
|
|
95
|
+
return (`<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img" aria-label="${escapeXml(`Placeholder: ${label}`)}">` +
|
|
96
|
+
`<rect width="${width}" height="${height}" fill="${bg}"/>` +
|
|
97
|
+
text +
|
|
98
|
+
`<text x="${width / 2}" y="${sizeY}" text-anchor="middle" font-family="${family}" font-size="${sizeFont}" font-weight="400" fill="${ink}">${width}×${height} · placeholder</text>` +
|
|
99
|
+
`</svg>`);
|
|
100
|
+
}
|
|
101
|
+
/** Writes the placeholder: `.svg` → the vector source; anything else → a `scale`× PNG (via sharp). */
|
|
102
|
+
export async function writePlaceholder(opts) {
|
|
103
|
+
const svg = placeholderSvg(opts);
|
|
104
|
+
const out = resolve(opts.out);
|
|
105
|
+
mkdirSync(dirname(out), { recursive: true });
|
|
106
|
+
if (out.toLowerCase().endsWith('.svg')) {
|
|
107
|
+
writeFileSync(out, svg);
|
|
108
|
+
return { out, width: opts.width, height: opts.height };
|
|
109
|
+
}
|
|
110
|
+
const scale = opts.scale ?? 2;
|
|
111
|
+
const { default: sharp } = await import('sharp');
|
|
112
|
+
const png = await sharp(Buffer.from(svg), { density: 72 * scale })
|
|
113
|
+
.resize(opts.width * scale, opts.height * scale)
|
|
114
|
+
.png()
|
|
115
|
+
.toBuffer();
|
|
116
|
+
writeFileSync(out, png);
|
|
117
|
+
return { out, width: opts.width * scale, height: opts.height * scale };
|
|
118
|
+
}
|
|
119
|
+
/** `--label=… --size=560x320 --tint=… --hero --scale=2 --out=…` → options. */
|
|
120
|
+
export function parsePlaceholderArgs(argv) {
|
|
121
|
+
const get = (k) => argv.find((a) => a.startsWith(`--${k}=`))?.slice(k.length + 3);
|
|
122
|
+
const size = get('size') ?? '';
|
|
123
|
+
const m = size.match(/^(\d+)x(\d+)$/);
|
|
124
|
+
if (!m)
|
|
125
|
+
throw new Error('--size=<width>x<height> (display px, e.g. 560x320) is required');
|
|
126
|
+
const out = get('out');
|
|
127
|
+
if (!out)
|
|
128
|
+
throw new Error('--out=<path>.png (or .svg) is required — a campaign asset goes in src/assets/<campaign>/');
|
|
129
|
+
return {
|
|
130
|
+
width: Number(m[1]),
|
|
131
|
+
height: Number(m[2]),
|
|
132
|
+
label: get('label') ?? '',
|
|
133
|
+
tint: get('tint') ?? 'cool-grey',
|
|
134
|
+
hero: argv.includes('--hero'),
|
|
135
|
+
scale: get('scale') ? Number(get('scale')) : undefined,
|
|
136
|
+
out,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const isMain = process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;
|
|
140
|
+
if (isMain) {
|
|
141
|
+
writePlaceholder(parsePlaceholderArgs(process.argv.slice(2)))
|
|
142
|
+
.then((r) => console.log(`✓ placeholder ${r.width}×${r.height}px → ${r.out}`))
|
|
143
|
+
.catch((err) => {
|
|
144
|
+
console.error(`✗ ${err.message}`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=placeholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../src/build/placeholder.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
*
|
|
27
27
|
* Usage: tsx src/build/visual-resolver.ts --brief=<path-to-visual-brief.json>
|
|
28
28
|
*/
|
|
29
|
-
import type
|
|
29
|
+
import { type SlotShape } from './asset-scoring';
|
|
30
|
+
import { type StockLibraryEntry } from './stock-library-map';
|
|
30
31
|
export type VisualSource = 'agent-portrait' | 'product-ui' | 'logo' | 'abstract' | 'icon' | string;
|
|
31
32
|
export interface VisualSlotSpec {
|
|
32
33
|
/** e.g. "product-ui-hero → Image" — ties the slot to a real section field (BRIEF-HANDOVER §3). */
|
|
@@ -53,6 +54,8 @@ export interface VisualResolution {
|
|
|
53
54
|
/** status === 'placeholder' */
|
|
54
55
|
placeholderSvg?: string;
|
|
55
56
|
placeholderComment?: string;
|
|
57
|
+
/** status === 'placeholder': the `email:placeholder` command that renders it labelled, on an approved tint. */
|
|
58
|
+
placeholderCommand?: string;
|
|
56
59
|
/** status === 'gap' */
|
|
57
60
|
gapReason?: string;
|
|
58
61
|
}
|
|
@@ -65,6 +68,20 @@ export type { SlotShape };
|
|
|
65
68
|
* as a stage-2 tie-breaker only (see stock-library-map.ts) — it never gates a match on its own.
|
|
66
69
|
*/
|
|
67
70
|
export declare function deriveSlotShape(spec: VisualSlotSpec): SlotShape;
|
|
71
|
+
/**
|
|
72
|
+
* Tier 5 by name (K10 EM-6): a brief that already knows the stock image names it in `assetRef` —
|
|
73
|
+
* `stock: <slug>`, `asset/<slug>`, the bare slug, the entry name, its file name or its Cloudinary URL.
|
|
74
|
+
* An exact key wins. A partial slug (`ai-work-management-hero` also prefixes `…-hero-alt`) or a
|
|
75
|
+
* name shared by several entries is a tie, broken deterministically — never by catalogue order:
|
|
76
|
+
* 1. more of the entry's tags named in `intent`, 2. aspect fits the slot shape, 3. shorter slug,
|
|
77
|
+
* 4. slug A→Z.
|
|
78
|
+
* No entry matches the ref → null, and the resolver falls back to the intent search.
|
|
79
|
+
*/
|
|
80
|
+
export declare function findStockEntryByRef(assetRef: string, intent: string, shape: SlotShape): {
|
|
81
|
+
entry: StockLibraryEntry;
|
|
82
|
+
via: 'exact' | 'tie-break';
|
|
83
|
+
candidates: string[];
|
|
84
|
+
} | null;
|
|
68
85
|
/** Resolve one visual-brief slot. `campaign` scopes tier-3 local-folder lookups. */
|
|
69
86
|
export declare function resolveVisualSlot(spec: VisualSlotSpec, campaign: string): VisualResolution;
|
|
70
87
|
//# sourceMappingURL=visual-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-resolver.d.ts","sourceRoot":"","sources":["../../src/build/visual-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"visual-resolver.d.ts","sourceRoot":"","sources":["../../src/build/visual-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAIzE,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAgClG,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;AAElG,MAAM,WAAW,cAAc;IAC7B,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,aAAa,GAAG,KAAK,CAAA;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,sBAAsB,CAAA;IAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,+GAA+G;IAC/G,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiBD,YAAY,EAAE,SAAS,EAAE,CAAA;AAEzB;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAO/D;AAkGD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,GACf;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CA4BvF;AAgBD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA4K1F"}
|
|
@@ -29,10 +29,11 @@
|
|
|
29
29
|
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
30
30
|
import { basename, dirname, join, resolve } from 'node:path';
|
|
31
31
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
32
|
+
import { SHAPE_ACCEPTABLE_RATIOS } from './asset-scoring';
|
|
32
33
|
import { assetsDir } from './email-tree';
|
|
33
34
|
import { findIconByName, findIconEntry } from './icon-registry-map';
|
|
34
35
|
import { findPersonaEntry } from './persona-character-map';
|
|
35
|
-
import { findStockLibraryEntry } from './stock-library-map';
|
|
36
|
+
import { findStockLibraryEntry, STOCK_LIBRARY } from './stock-library-map';
|
|
36
37
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
37
38
|
/** Cross-package: the repo's one real agent-portrait library lives under packages/react. */
|
|
38
39
|
const AGENTS_IMAGES_DIR = resolve(__dirname, '../../../../packages/react/src/visuals/agents/images');
|
|
@@ -187,6 +188,52 @@ function findExactFile(dir, filename) {
|
|
|
187
188
|
const byStem = files.find((f) => f.toLowerCase().replace(/\.[a-z0-9]+$/i, '') === wantedStem);
|
|
188
189
|
return byStem ? join(dir, byStem) : null;
|
|
189
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Tier 5 by name (K10 EM-6): a brief that already knows the stock image names it in `assetRef` —
|
|
193
|
+
* `stock: <slug>`, `asset/<slug>`, the bare slug, the entry name, its file name or its Cloudinary URL.
|
|
194
|
+
* An exact key wins. A partial slug (`ai-work-management-hero` also prefixes `…-hero-alt`) or a
|
|
195
|
+
* name shared by several entries is a tie, broken deterministically — never by catalogue order:
|
|
196
|
+
* 1. more of the entry's tags named in `intent`, 2. aspect fits the slot shape, 3. shorter slug,
|
|
197
|
+
* 4. slug A→Z.
|
|
198
|
+
* No entry matches the ref → null, and the resolver falls back to the intent search.
|
|
199
|
+
*/
|
|
200
|
+
export function findStockEntryByRef(assetRef, intent, shape) {
|
|
201
|
+
const raw = assetRef
|
|
202
|
+
.trim()
|
|
203
|
+
.replace(/^(?:stock(?:[- ]?library)?|stocklibrary|stock_library)\s*:\s*/i, '')
|
|
204
|
+
.trim();
|
|
205
|
+
if (!raw)
|
|
206
|
+
return null;
|
|
207
|
+
const ref = basename(raw.replace(/^asset\//i, ''))
|
|
208
|
+
.replace(/\.(png|jpe?g|gif|webp)$/i, '')
|
|
209
|
+
.toLowerCase();
|
|
210
|
+
const slugOf = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
211
|
+
const exact = STOCK_LIBRARY.filter((e) => e.slug === ref || e.localFile.toLowerCase().replace(/\.[a-z0-9]+$/i, '') === ref || basename(e.cloudinaryUrl).toLowerCase().replace(/\.[a-z0-9]+$/i, '') === ref);
|
|
212
|
+
const pool = exact.length ? exact : STOCK_LIBRARY.filter((e) => slugOf(e.name) === slugOf(raw) || e.slug.startsWith(`${slugOf(ref)}-`));
|
|
213
|
+
if (!pool.length)
|
|
214
|
+
return null;
|
|
215
|
+
const lower = intent.toLowerCase();
|
|
216
|
+
const fits = SHAPE_ACCEPTABLE_RATIOS[shape];
|
|
217
|
+
const ranked = [...pool].sort((a, b) => {
|
|
218
|
+
const ta = a.tags.filter((t) => containsWord(lower, t)).length;
|
|
219
|
+
const tb = b.tags.filter((t) => containsWord(lower, t)).length;
|
|
220
|
+
if (ta !== tb)
|
|
221
|
+
return tb - ta;
|
|
222
|
+
const fa = fits.has(a.aspectRatioLabel) ? 1 : 0;
|
|
223
|
+
const fb = fits.has(b.aspectRatioLabel) ? 1 : 0;
|
|
224
|
+
if (fa !== fb)
|
|
225
|
+
return fb - fa;
|
|
226
|
+
if (a.slug.length !== b.slug.length)
|
|
227
|
+
return a.slug.length - b.slug.length;
|
|
228
|
+
return a.slug < b.slug ? -1 : a.slug > b.slug ? 1 : 0;
|
|
229
|
+
});
|
|
230
|
+
return { entry: ranked[0], via: pool.length === 1 ? 'exact' : 'tie-break', candidates: ranked.map((e) => e.slug) };
|
|
231
|
+
}
|
|
232
|
+
/** How to turn a placeholder spec into a labelled, approved-tint PNG (K10 EM-2, placeholder.ts). */
|
|
233
|
+
function placeholderCommand(intent, campaign) {
|
|
234
|
+
const label = intent.replace(/"/g, "'").slice(0, 120);
|
|
235
|
+
return `pnpm --filter @clay-design-system/email email:placeholder -- --label="${label}" --size=<width>x<height> --out=<abs>/packages/email/src/assets/${campaign}/<name>.png`;
|
|
236
|
+
}
|
|
190
237
|
function pickPlaceholderSvg() {
|
|
191
238
|
const preferred = join(assetsDir, 'placeholders', 'placeholder-560x315.svg');
|
|
192
239
|
if (existsSync(preferred))
|
|
@@ -206,6 +253,7 @@ export function resolveVisualSlot(spec, campaign) {
|
|
|
206
253
|
tier: 2,
|
|
207
254
|
placeholderSvg: pickPlaceholderSvg(),
|
|
208
255
|
placeholderComment: `[PLACEHOLDER: composite agent+UI scene — ${intent}. No dedicated library yet; see knowledge/hero-pipeline.md for the Hero pipeline fallback.]`,
|
|
256
|
+
placeholderCommand: placeholderCommand(intent, campaign),
|
|
209
257
|
detail: 'Classified as composite (intent mentions UI/product elements) — tier 1 AgentVisual only covers standalone portraits. Tier 2 (Hero pipeline) has no ready library yet, so placeholder is legitimate per email-assets/SKILL.md.',
|
|
210
258
|
};
|
|
211
259
|
}
|
|
@@ -255,6 +303,7 @@ export function resolveVisualSlot(spec, campaign) {
|
|
|
255
303
|
tier: 4,
|
|
256
304
|
placeholderSvg: pickPlaceholderSvg(),
|
|
257
305
|
placeholderComment: `[PLACEHOLDER: logo — ${intent}. No repo-hosted customer/integration logo registry exists yet for email.]`,
|
|
306
|
+
placeholderCommand: placeholderCommand(intent, campaign),
|
|
258
307
|
detail: 'No shared or campaign-local logo file matched. Legitimate placeholder — no repo-hosted registry for arbitrary customer/integration logos yet (email-assets/SKILL.md tier 4).',
|
|
259
308
|
};
|
|
260
309
|
}
|
|
@@ -266,6 +315,18 @@ export function resolveVisualSlot(spec, campaign) {
|
|
|
266
315
|
// every entry in stock-library-map.ts is a marketing hero/card illustration (dashboards,
|
|
267
316
|
// agent-feature cards, exchanges), not an actual brand/product logo — wiring it into the
|
|
268
317
|
// logo branch would only add a chance of a wrong match for zero real coverage gain.
|
|
318
|
+
// EM-6: a brief that names the stock image (`assetRef`) gets that image — before the intent search.
|
|
319
|
+
const byRef = assetRef ? findStockEntryByRef(assetRef, intent, deriveSlotShape(spec)) : null;
|
|
320
|
+
if (byRef) {
|
|
321
|
+
const tie = byRef.via === 'tie-break' ? ` (assetRef matched ${byRef.candidates.length} entries: ${byRef.candidates.join(', ')}; tie broken by intent tags → aspect fit → shorter slug → A→Z)` : '';
|
|
322
|
+
return {
|
|
323
|
+
slot,
|
|
324
|
+
status: 'resolved',
|
|
325
|
+
tier: 5,
|
|
326
|
+
assetPath: byRef.entry.cloudinaryUrl,
|
|
327
|
+
detail: `Matched stock-library entry "${byRef.entry.slug}" from assetRef "${assetRef}"${tie} — already hosted, no upload step needed.`,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
269
330
|
const stockMatch = findStockLibraryEntry({ intent, shape: deriveSlotShape(spec), campaign });
|
|
270
331
|
if (stockMatch) {
|
|
271
332
|
const { entry, disambiguatedBy } = stockMatch;
|
|
@@ -284,7 +345,8 @@ export function resolveVisualSlot(spec, campaign) {
|
|
|
284
345
|
tier: 4,
|
|
285
346
|
placeholderSvg: pickPlaceholderSvg(),
|
|
286
347
|
placeholderComment: `[PLACEHOLDER: ${source} — ${intent}. Generation prompt: "${intent}".]`,
|
|
287
|
-
|
|
348
|
+
placeholderCommand: placeholderCommand(intent, campaign),
|
|
349
|
+
detail: `No campaign-local asset${assetRef ? ` or stock-library entry for assetRef "${assetRef}"` : ''} and no unambiguous stock-library match. Legitimate placeholder — ${source === 'product-ui' ? 'no repo-hosted product-screenshot library exists yet' : 'abstract art has no registry'} beyond the stock library (email-assets/SKILL.md tier 4).`,
|
|
288
350
|
};
|
|
289
351
|
}
|
|
290
352
|
if (source === 'icon') {
|
|
@@ -313,6 +375,7 @@ export function resolveVisualSlot(spec, campaign) {
|
|
|
313
375
|
tier: 4,
|
|
314
376
|
placeholderSvg: pickPlaceholderSvg(),
|
|
315
377
|
placeholderComment: `[PLACEHOLDER: icon — ${intent}. No matching icon in the Clay registry.]`,
|
|
378
|
+
placeholderCommand: placeholderCommand(intent, campaign),
|
|
316
379
|
detail: 'No icon in the ~600-icon Clay registry (packages/react/src/icons) matched by exact name or an unambiguous tag. Legitimate placeholder — not every requested icon concept exists in the registry (email-assets/SKILL.md tier 4).',
|
|
317
380
|
};
|
|
318
381
|
}
|
|
@@ -343,7 +406,8 @@ export function resolveVisualSlot(spec, campaign) {
|
|
|
343
406
|
const STATUS_ICON = { resolved: '✓', placeholder: '◻', gap: '✗' };
|
|
344
407
|
function formatResolution(r) {
|
|
345
408
|
const label = r.status === 'resolved' ? r.assetPath : r.status === 'placeholder' ? r.placeholderComment : `GAP (${r.gapReason})`;
|
|
346
|
-
|
|
409
|
+
const make = r.placeholderCommand ? `\n render it: ${r.placeholderCommand}` : '';
|
|
410
|
+
return ` ${STATUS_ICON[r.status]} ${r.slot}\n ${label}\n ${r.detail}${make}`;
|
|
347
411
|
}
|
|
348
412
|
async function main() {
|
|
349
413
|
const briefArg = process.argv.find((a) => a.startsWith('--brief='));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-resolver.js","sourceRoot":"","sources":["../../src/build/visual-resolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"visual-resolver.js","sourceRoot":"","sources":["../../src/build/visual-resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/catalog.json
CHANGED
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"id": "list-action-items",
|
|
108
108
|
"title": "List Action Items",
|
|
109
109
|
"kind": "section",
|
|
110
|
-
"html": "<!doctype html>\n<html lang=\"und\" dir=\"auto\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\">\n <head>\n <title>List — Action items</title>\n <!--[if !mso]><!-->\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <!--<![endif]-->\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style type=\"text/css\">\n #outlook a { padding:0; }\n body { margin:0;padding:0;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%; }\n table, td { border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt; }\n img { border:0;height:auto;line-height:100%; outline:none;text-decoration:none;-ms-interpolation-mode:bicubic; }\n p { display:block;margin:13px 0; }\n </style>\n <!--[if mso]>\n <noscript>\n <xml>\n <o:OfficeDocumentSettings>\n <o:AllowPNG/>\n <o:PixelsPerInch>96</o:PixelsPerInch>\n </o:OfficeDocumentSettings>\n </xml>\n </noscript>\n <![endif]-->\n <!--[if lte mso 11]>\n <style type=\"text/css\">\n .mj-outlook-group-fix { width:100% !important; }\n </style>\n <![endif]-->\n \n <!--[if !mso]><!-->\n <link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap\" rel=\"stylesheet\" type=\"text/css\">\n <style type=\"text/css\">\n @import url(https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap);\n </style>\n <!--<![endif]-->\n\n \n \n <style type=\"text/css\">\n @media only screen and (min-width:480px) {\n .mj-column-per-100 { width:100% !important; max-width: 100%; }\n.mj-column-per-6-785714 { width:6.785714% !important; max-width: 6.785714%; }\n.mj-column-per-93-214286 { width:93.214286% !important; max-width: 93.214286%; }\n }\n </style>\n <style media=\"screen and (min-width:480px)\">\n .moz-text-html .mj-column-per-100 { width:100% !important; max-width: 100%; }\n.moz-text-html .mj-column-per-6-785714 { width:6.785714% !important; max-width: 6.785714%; }\n.moz-text-html .mj-column-per-93-214286 { width:93.214286% !important; max-width: 93.214286%; }\n </style>\n \n \n \n \n <style type=\"text/css\">\n\n @media only screen and (max-width:479px) {\n table.mj-full-width-mobile { width: 100% !important; }\n td.mj-full-width-mobile { width: auto !important; }\n }\n \n </style>\n \n <style type=\"text/css\">\n/* Client resets emaillove ships that MJML omits (Outlook.com line-height, image gaps). */\n img { display: block; }\n .ExternalClass { width: 100%; }\n .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div { line-height: 100%; }\n /* Dark-only images hidden in light mode; swapped in the dark block below. */\n .dl { display: none; }\n\n /* Mobile heading step-down — one-notch scale at the DS phone-only breakpoint\n @media(max-width:479px) (h1 56→48, h2 48→40, h3 40→32, h4 32→24). Keyed off the clay-h*\n css-class on the mj-text td; targets the inner div where MJML places font-size. Desktop\n size is the inline fallback if style is dropped. Per production emails, only the primary/\n hero heading opts in — add css-class=\"clay-hN\" (alongside mj-class) to the hero heading's\n mj-text; secondary content headings keep mj-class alone and stay at desktop size. */\n @media only screen and (max-width: 479px) {\n .clay-h1 > div { font-size: 48px !important; }\n .clay-h2 > div { font-size: 40px !important; }\n .clay-h3 > div { font-size: 32px !important; }\n .clay-h4 > div { font-size: 24px !important; }\n\n /* Mobile H-padding utilities — apply as css-class on mj-wrapper or mj-section to reduce\n the 40px horizontal padding to the source breakpoint value when columns stack (below 480px).\n Source: emaillove export mobile CSS (.b98-68 → 24px, .d9b-0c → 16px, .fb5-e8 → 24px).\n Targets the outer td MJML generates with inline padding-left/padding-right. */\n .email-mobile-px-24 > table > tbody > tr > td { padding-right: 24px !important; padding-left: 24px !important; }\n .email-mobile-px-16 > table > tbody > tr > td { padding-right: 16px !important; padding-left: 16px !important; }\n .email-mobile-px-0 > table > tbody > tr > td { padding-right: 0 !important; padding-left: 0 !important; }\n .email-mobile-pt-0 > table > tbody > tr > td { padding-top: 0 !important; }\n\n /* Mobile text centering — apply as css-class on mj-text elements whose content should be\n center-aligned on mobile (below 480px). Matches the source emaillove .s0>div{text-align:center}.\n Targets the inner div MJML wraps text content in. */\n .email-mobile-center > div { text-align: center !important; }\n\n /* Mobile image centering — apply css-class=\"email-mobile-center-img\" on mj-image.\n text-align on the td does not reposition its block-level child table (CSS text-align\n only affects inline content), so the nested image-wrapper table also needs margin:auto\n to actually override the mj-image align=\"left\"/\"right\" attribute on mobile. */\n .email-mobile-center-img { text-align: center !important; }\n .email-mobile-center-img > table { margin: 0 auto !important; }\n\n /* Full-width button on mobile — apply css-class=\"email-btn-full\" to mj-button.\n Makes the button's inner table fill the column width and centers it.\n Matches emaillove .mj-b-full pattern. */\n .email-btn-full > table { width: 100% !important; }\n .email-btn-full > table > tbody > tr > td { text-align: center !important; }\n }\n\n /* Left-aligned button content — apply css-class=\"email-btn-left\" to mj-button.\n Overrides MJML's default text-align:center on the inner td and anchor so\n icon+text rows (e.g. buttons-icons) are left-aligned like the emaillove source. */\n .email-btn-left > table > tbody > tr > td { text-align: left !important; }\n .email-btn-left > table > tbody > tr > td > a { text-align: left !important; }\n\n /* Decorative image tilt — apply css-class=\"email-tilt-1\"..\"email-tilt-4\" to mj-image for a\n fanned photo-stack look (e.g. an avatar composite row). Webkit/Blink clients rotate the\n image; Outlook and other non-supporting clients silently ignore the transform and show the\n image unrotated — safe graceful degradation, never a broken layout. */\n .email-tilt-1 { transform: rotate(-6deg); }\n .email-tilt-2 { transform: rotate(4deg); }\n .email-tilt-3 { transform: rotate(-4deg); }\n .email-tilt-4 { transform: rotate(6deg); }\n\n :root { color-scheme: light dark; supported-color-schemes: light dark; }\n @media (prefers-color-scheme: dark) {\n body, .email-page { background-color: #000000 !important; }\n /*\n * email-card: flip a section or column's background to dark.\n *\n * Three selectors cover every compiled MJML structure:\n * 1. .email-card — the outer div (mj-section or mj-column)\n * 2. .email-card > table — the direct child table (mj-section has inline bg here)\n * 3. .email-card > table > tbody > tr > td\n * — the content td inside mj-column (carries inline bg-color\n * + border-radius when background-color is set on mj-column)\n *\n * Apply css-class=\"email-card\" to any mj-section or mj-column that should\n * become dark. Works for grey inner cards (#f3f4f5), coloured panels, etc.\n */\n .email-card,\n .email-card > table,\n .email-card > table > tbody > tr > td { background-color: #252526 !important; }\n .email-text, .email-text * { color: #ffffff !important; }\n .ll { display: none !important; }\n .dl { display: block !important; }\n /* Black CTA button invert — apply css-class=\"email-btn-invert-dark\" to invert a black\n mj-button to white background + black text in dark mode. Matches emaillove global\n .mj-b>td { background-color:#ffffff } pattern for black CTA buttons. */\n .email-btn-invert-dark > table > tbody > tr > td { background-color: #ffffff !important; }\n .email-btn-invert-dark > table > tbody > tr > td > a { background-color: #ffffff !important; color: #000000 !important; }\n }\n /* Outlook.com + Gmail-app dark mode — these clients ignore prefers-color-scheme and instead\n prefix overridden nodes with data-ogsc (foreground) / data-ogsb (background). */\n [data-ogsb] body, [data-ogsb] .email-page { background-color: #000000 !important; }\n [data-ogsb] .email-card,\n [data-ogsb] .email-card > table,\n [data-ogsb] .email-card > table > tbody > tr > td { background-color: #252526 !important; }\n [data-ogsc] .email-text, [data-ogsc] .email-text * { color: #ffffff !important; }\n </style>\n <!-- GENERATED by src/tokens/build-email-tokens.ts — do not edit. Run `pnpm --filter @clay-design-system/email tokens:check`. -->\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"x-apple-disable-message-reformatting\" />\n <meta name=\"color-scheme\" content=\"light dark\" />\n <meta name=\"supported-color-schemes\" content=\"light dark\" />\n </head>\n <body style=\"word-spacing:normal;background-color:#f3f4f5;\">\n \n <div style=\"display:none;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;max-width:0px;opacity:0;overflow:hidden;\">Section preview — list action items</div>\n \n \n <div\n aria-label=\"List — Action items\" aria-roledescription=\"email\" style=\"background-color:#f3f4f5;\" role=\"article\" lang=\"und\" dir=\"auto\"\n >\n <!-- Fragment starts with mj-wrapper — no extra wrapper needed. --><!-- list-action-items — icon + iris-labeled inline text row list.\n Source: emaillove \"Lists\" export / Figma \"Lists\" node 1:684.\n Each row: mj-group (100%) → icon col (6.785714% = 38px) + text col (93.214286% = 522px).\n 3 list items; first at 0 top padding, items 2-3 at 24px top padding.\n Text uses inline iris (#6161ff) span for the action label + black span for body.\n mj-group keeps icon + text inline at ALL viewport sizes.\n Mobile: H-padding → 24px (email-mobile-px-24 on wrapper). -->\n \n <!--[if mso | IE]><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"email-card-outlook email-mobile-px-24-outlook\" role=\"presentation\" style=\"width:640px;\" width=\"640\" bgcolor=\"#ffffff\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div class=\"email-card email-mobile-px-24\" style=\"background:#ffffff;background-color:#ffffff;margin:0px auto;max-width:640px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"background:#ffffff;background-color:#ffffff;width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"direction:ltr;font-size:0px;padding:24px 40px;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><![endif]-->\n \n <!-- Item 1: Set up an automation -->\n <!--[if mso | IE]><tr><td class=\"\" width=\"640px\" ><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"\" role=\"presentation\" style=\"width:560px;\" width=\"560\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div style=\"margin:0px auto;max-width:560px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"direction:ltr;font-size:0px;padding:0;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"\" style=\"width:560px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-100 mj-outlook-group-fix\" style=\"font-size:0;line-height:0;text-align:left;display:inline-block;width:100%;direction:ltr;\"\n >\n <!--[if mso | IE]><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" ><tr><td style=\"vertical-align:top;width:37px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-6-785714 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:6.785714%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding:0;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"center\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"border-collapse:collapse;border-spacing:0px;\"\n >\n <tbody>\n <tr>\n <td style=\"width:21px;\">\n \n <img\n alt=\"\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAABKtJREFUeAHNWU1sG0UU/mZ28+OsHZtwSLlVEYdULYhAUInKoRKNRA6tSNULnKqUiqbQIkDc+BHigtQDolBAIimHnkCVsFTAqkogB6pwqJQeaOtDVXKqUkWkTvxfe3f63jrZOK7t3XVtJ99lZzxvvJ/fvHnz5rNAg1BK6avp9AEpxD6lMCwgdipl7RBCRErjSAkpFskuLiH+BawZwzD+pvEcGoCAT6ysZF6SUh2jmUeoG/E3Gwl6YZR+xlfBYPC6n4meiSYS6WFNF2foJfvRDChEhVCfeSXsSpSWrjuVyZ6hxgnq6mg2BL4P9vS85xYSdYmurOSellrxEpkNoqUQ8aImxp4IBBZqWtQaSCaT+yHkL/Afh40iAWWNh0Kh2WqDVYmukYxRsxvtRY7IjlUj+wjR+9nsTt205tE+T1YiYZnai+Fw9+3yD2V5hzeObprsya0iyYhIzbrEXMo/3EQ0lcl82fqN4wVq0M40ZXCWPpVKPacg5rF9UDQFRiKGcY07jkeVEp+izUgk6mZHXVPC8apt2W5vFgrA1A9duHVLwzPPmjh+PF/T1jLFSDjc88+aR8W7aBNMEzg/XSLJiK89a0HqVFfwk3eXAl5Dm/DzT524cWOD3KtjhfoTFI5wpSbT6fTLaFM6+u3XDszNbZQLB0YLGB0tuE2L2OUkOfUVtAGxWAcuX+5w+nv3FnHokCtJG1Jo+4io2oMW488ZHbHfN0ju3m3i9TceeJ5PBfkwxShamuCvz2uIRjud/q5dJiaO5SGl9+/g24OkjbTDi/HduxJXruhYXvZ+Kbh5U8OFC11Of2DAxJuUijo64A98xUmm0srNzrKATz4OYHVVoLdX4dTpHPr7lSvJ6akuO2cy+vstvP9BDoEAGoLnBVh/IZP9+mw37t2r7dmF/yR+PN/pzOnrU3j7nXzDJG2ilKMSrkb0c946kUdXl3Ilu7QkMEWezOeFQ/I0rUAk4rpwtUE3WrrtykUvtgMDFiZP1ifL8XvuXLc9xuAwmTyZQ9+Tj0GSQddu2kxqwat9PbJcYJyl9vL/JZJsMzGRd41lLxCkDYhkOvs57aqP/Ey8c0fiu283lpc9FwgoIlwKed7VvLs5FTUDJGR8IS1lXoVPVPPsOkmO52aStGFZM4IP/FQ6s4QGzvtKzzKOHs3j+ReaSJLK1qDR8xRtJlGk1H8RDaDSs4cPP2g2SS6YoyxO2K6w9SRNzaFBZLOwvfpYKagGBNQQyz7OmiVTmb+apis1C6RPhULGODedk8kU6kN6FLGNwCLaetshat/2SLDCdgGLZ2VK36Yz0Fbu0tl5vldjS6HiQcMYKlf4NhUlPGCZhYNgwWrLoBK6po1VypCPVE/hcPg2q2pgwar9IJFMGw9UkR+rlnm2mkaqGtrqWarilCQlLzBbbbRuuZ4lZa9oqljrY1bFLVM/WKnglaNu4cxLEDQCQy3MBnwqfsMbpx5JhmuFz0EdMoxJPiE4AaNpULNmESP03ae8/KXj++8b1qlYAqI6ltQV4bOQ4TgUFy1LTLOe5Gemb6LOKynnllQWFjDUHiUwqCzQH2IIro0nqL1I4tsCPa9ZSl3tNYw/7CKoATwEZ+n0mgWTljUAAAAASUVORK5CYII=\" style=\"border:0;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;\" width=\"21\" height=\"auto\"\n />\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td><td style=\"vertical-align:top;width:522px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-93-214286 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:93.214286%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding-left:8px;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"left\" class=\"email-text\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <div\n style=\"font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#000000;\"\n ><span style=\"color:#6161ff !important;\">Set up an automation: </span><span>to notify your team or update a status when a payment is marked "Paid."</span></div>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table></td></tr><![endif]-->\n <!-- Item 2: Sync data across boards -->\n <!--[if mso | IE]><tr><td class=\"\" width=\"640px\" ><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"\" role=\"presentation\" style=\"width:560px;\" width=\"560\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div style=\"margin:0px auto;max-width:560px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"direction:ltr;font-size:0px;padding:24px 0 0;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"\" style=\"width:560px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-100 mj-outlook-group-fix\" style=\"font-size:0;line-height:0;text-align:left;display:inline-block;width:100%;direction:ltr;\"\n >\n <!--[if mso | IE]><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" ><tr><td style=\"vertical-align:top;width:37px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-6-785714 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:6.785714%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding:0;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"center\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"border-collapse:collapse;border-spacing:0px;\"\n >\n <tbody>\n <tr>\n <td style=\"width:21px;\">\n \n <img\n alt=\"\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAABKtJREFUeAHNWU1sG0UU/mZ28+OsHZtwSLlVEYdULYhAUInKoRKNRA6tSNULnKqUiqbQIkDc+BHigtQDolBAIimHnkCVsFTAqkogB6pwqJQeaOtDVXKqUkWkTvxfe3f63jrZOK7t3XVtJ99lZzxvvJ/fvHnz5rNAg1BK6avp9AEpxD6lMCwgdipl7RBCRErjSAkpFskuLiH+BawZwzD+pvEcGoCAT6ysZF6SUh2jmUeoG/E3Gwl6YZR+xlfBYPC6n4meiSYS6WFNF2foJfvRDChEhVCfeSXsSpSWrjuVyZ6hxgnq6mg2BL4P9vS85xYSdYmurOSellrxEpkNoqUQ8aImxp4IBBZqWtQaSCaT+yHkL/Afh40iAWWNh0Kh2WqDVYmukYxRsxvtRY7IjlUj+wjR+9nsTt205tE+T1YiYZnai+Fw9+3yD2V5hzeObprsya0iyYhIzbrEXMo/3EQ0lcl82fqN4wVq0M40ZXCWPpVKPacg5rF9UDQFRiKGcY07jkeVEp+izUgk6mZHXVPC8apt2W5vFgrA1A9duHVLwzPPmjh+PF/T1jLFSDjc88+aR8W7aBNMEzg/XSLJiK89a0HqVFfwk3eXAl5Dm/DzT524cWOD3KtjhfoTFI5wpSbT6fTLaFM6+u3XDszNbZQLB0YLGB0tuE2L2OUkOfUVtAGxWAcuX+5w+nv3FnHokCtJG1Jo+4io2oMW488ZHbHfN0ju3m3i9TceeJ5PBfkwxShamuCvz2uIRjud/q5dJiaO5SGl9+/g24OkjbTDi/HduxJXruhYXvZ+Kbh5U8OFC11Of2DAxJuUijo64A98xUmm0srNzrKATz4OYHVVoLdX4dTpHPr7lSvJ6akuO2cy+vstvP9BDoEAGoLnBVh/IZP9+mw37t2r7dmF/yR+PN/pzOnrU3j7nXzDJG2ilKMSrkb0c946kUdXl3Ilu7QkMEWezOeFQ/I0rUAk4rpwtUE3WrrtykUvtgMDFiZP1ifL8XvuXLc9xuAwmTyZQ9+Tj0GSQddu2kxqwat9PbJcYJyl9vL/JZJsMzGRd41lLxCkDYhkOvs57aqP/Ey8c0fiu283lpc9FwgoIlwKed7VvLs5FTUDJGR8IS1lXoVPVPPsOkmO52aStGFZM4IP/FQ6s4QGzvtKzzKOHs3j+ReaSJLK1qDR8xRtJlGk1H8RDaDSs4cPP2g2SS6YoyxO2K6w9SRNzaFBZLOwvfpYKagGBNQQyz7OmiVTmb+apis1C6RPhULGODedk8kU6kN6FLGNwCLaetshat/2SLDCdgGLZ2VK36Yz0Fbu0tl5vldjS6HiQcMYKlf4NhUlPGCZhYNgwWrLoBK6po1VypCPVE/hcPg2q2pgwar9IJFMGw9UkR+rlnm2mkaqGtrqWarilCQlLzBbbbRuuZ4lZa9oqljrY1bFLVM/WKnglaNu4cxLEDQCQy3MBnwqfsMbpx5JhmuFz0EdMoxJPiE4AaNpULNmESP03ae8/KXj++8b1qlYAqI6ltQV4bOQ4TgUFy1LTLOe5Gemb6LOKynnllQWFjDUHiUwqCzQH2IIro0nqL1I4tsCPa9ZSl3tNYw/7CKoATwEZ+n0mgWTljUAAAAASUVORK5CYII=\" style=\"border:0;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;\" width=\"21\" height=\"auto\"\n />\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td><td style=\"vertical-align:top;width:522px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-93-214286 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:93.214286%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding-left:8px;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"left\" class=\"email-text\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <div\n style=\"font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#000000;\"\n ><span style=\"color:#6161ff !important;\">Sync data across boards:</span><span> to keep billing status updated in a different board or project automatically.</span></div>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table></td></tr><![endif]-->\n <!-- Item 3: Integration callout -->\n <!--[if mso | IE]><tr><td class=\"\" width=\"640px\" ><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"\" role=\"presentation\" style=\"width:560px;\" width=\"560\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div style=\"margin:0px auto;max-width:560px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"direction:ltr;font-size:0px;padding:24px 0 0;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"\" style=\"width:560px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-100 mj-outlook-group-fix\" style=\"font-size:0;line-height:0;text-align:left;display:inline-block;width:100%;direction:ltr;\"\n >\n <!--[if mso | IE]><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" ><tr><td style=\"vertical-align:top;width:37px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-6-785714 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:6.785714%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding:0;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"center\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"border-collapse:collapse;border-spacing:0px;\"\n >\n <tbody>\n <tr>\n <td style=\"width:21px;\">\n \n <img\n alt=\"\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAABKtJREFUeAHNWU1sG0UU/mZ28+OsHZtwSLlVEYdULYhAUInKoRKNRA6tSNULnKqUiqbQIkDc+BHigtQDolBAIimHnkCVsFTAqkogB6pwqJQeaOtDVXKqUkWkTvxfe3f63jrZOK7t3XVtJ99lZzxvvJ/fvHnz5rNAg1BK6avp9AEpxD6lMCwgdipl7RBCRErjSAkpFskuLiH+BawZwzD+pvEcGoCAT6ysZF6SUh2jmUeoG/E3Gwl6YZR+xlfBYPC6n4meiSYS6WFNF2foJfvRDChEhVCfeSXsSpSWrjuVyZ6hxgnq6mg2BL4P9vS85xYSdYmurOSellrxEpkNoqUQ8aImxp4IBBZqWtQaSCaT+yHkL/Afh40iAWWNh0Kh2WqDVYmukYxRsxvtRY7IjlUj+wjR+9nsTt205tE+T1YiYZnai+Fw9+3yD2V5hzeObprsya0iyYhIzbrEXMo/3EQ0lcl82fqN4wVq0M40ZXCWPpVKPacg5rF9UDQFRiKGcY07jkeVEp+izUgk6mZHXVPC8apt2W5vFgrA1A9duHVLwzPPmjh+PF/T1jLFSDjc88+aR8W7aBNMEzg/XSLJiK89a0HqVFfwk3eXAl5Dm/DzT524cWOD3KtjhfoTFI5wpSbT6fTLaFM6+u3XDszNbZQLB0YLGB0tuE2L2OUkOfUVtAGxWAcuX+5w+nv3FnHokCtJG1Jo+4io2oMW488ZHbHfN0ju3m3i9TceeJ5PBfkwxShamuCvz2uIRjud/q5dJiaO5SGl9+/g24OkjbTDi/HduxJXruhYXvZ+Kbh5U8OFC11Of2DAxJuUijo64A98xUmm0srNzrKATz4OYHVVoLdX4dTpHPr7lSvJ6akuO2cy+vstvP9BDoEAGoLnBVh/IZP9+mw37t2r7dmF/yR+PN/pzOnrU3j7nXzDJG2ilKMSrkb0c946kUdXl3Ilu7QkMEWezOeFQ/I0rUAk4rpwtUE3WrrtykUvtgMDFiZP1ifL8XvuXLc9xuAwmTyZQ9+Tj0GSQddu2kxqwat9PbJcYJyl9vL/JZJsMzGRd41lLxCkDYhkOvs57aqP/Ey8c0fiu283lpc9FwgoIlwKed7VvLs5FTUDJGR8IS1lXoVPVPPsOkmO52aStGFZM4IP/FQ6s4QGzvtKzzKOHs3j+ReaSJLK1qDR8xRtJlGk1H8RDaDSs4cPP2g2SS6YoyxO2K6w9SRNzaFBZLOwvfpYKagGBNQQyz7OmiVTmb+apis1C6RPhULGODedk8kU6kN6FLGNwCLaetshat/2SLDCdgGLZ2VK36Yz0Fbu0tl5vldjS6HiQcMYKlf4NhUlPGCZhYNgwWrLoBK6po1VypCPVE/hcPg2q2pgwar9IJFMGw9UkR+rlnm2mkaqGtrqWarilCQlLzBbbbRuuZ4lZa9oqljrY1bFLVM/WKnglaNu4cxLEDQCQy3MBnwqfsMbpx5JhmuFz0EdMoxJPiE4AaNpULNmESP03ae8/KXj++8b1qlYAqI6ltQV4bOQ4TgUFy1LTLOe5Gemb6LOKynnllQWFjDUHiUwqCzQH2IIro0nqL1I4tsCPa9ZSl3tNYw/7CKoATwEZ+n0mgWTljUAAAAASUVORK5CYII=\" style=\"border:0;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;\" width=\"21\" height=\"auto\"\n />\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td><td style=\"vertical-align:top;width:522px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-93-214286 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:93.214286%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding-left:8px;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"left\" class=\"email-text\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <div\n style=\"font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#000000;\"\n ><span>Want to go even further? Connect tools like Stripe or QuickBooks via our </span><span style=\"color:#6161ff !important;\">integrations,</span><span> </span><span style=\"color:#6161ff !important;\">API or Zapier.</span></div>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n \n \n </div>\n \n </body>\n</html>\n "
|
|
110
|
+
"html": "<!doctype html>\n<html lang=\"und\" dir=\"auto\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\">\n <head>\n <title>List — Action items</title>\n <!--[if !mso]><!-->\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <!--<![endif]-->\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style type=\"text/css\">\n #outlook a { padding:0; }\n body { margin:0;padding:0;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%; }\n table, td { border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt; }\n img { border:0;height:auto;line-height:100%; outline:none;text-decoration:none;-ms-interpolation-mode:bicubic; }\n p { display:block;margin:13px 0; }\n </style>\n <!--[if mso]>\n <noscript>\n <xml>\n <o:OfficeDocumentSettings>\n <o:AllowPNG/>\n <o:PixelsPerInch>96</o:PixelsPerInch>\n </o:OfficeDocumentSettings>\n </xml>\n </noscript>\n <![endif]-->\n <!--[if lte mso 11]>\n <style type=\"text/css\">\n .mj-outlook-group-fix { width:100% !important; }\n </style>\n <![endif]-->\n \n <!--[if !mso]><!-->\n <link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap\" rel=\"stylesheet\" type=\"text/css\">\n <style type=\"text/css\">\n @import url(https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap);\n </style>\n <!--<![endif]-->\n\n \n \n <style type=\"text/css\">\n @media only screen and (min-width:480px) {\n .mj-column-per-100 { width:100% !important; max-width: 100%; }\n.mj-column-per-6-785714 { width:6.785714% !important; max-width: 6.785714%; }\n.mj-column-per-93-214286 { width:93.214286% !important; max-width: 93.214286%; }\n }\n </style>\n <style media=\"screen and (min-width:480px)\">\n .moz-text-html .mj-column-per-100 { width:100% !important; max-width: 100%; }\n.moz-text-html .mj-column-per-6-785714 { width:6.785714% !important; max-width: 6.785714%; }\n.moz-text-html .mj-column-per-93-214286 { width:93.214286% !important; max-width: 93.214286%; }\n </style>\n \n \n \n \n <style type=\"text/css\">\n\n @media only screen and (max-width:479px) {\n table.mj-full-width-mobile { width: 100% !important; }\n td.mj-full-width-mobile { width: auto !important; }\n }\n \n </style>\n \n <style type=\"text/css\">\n/* Client resets emaillove ships that MJML omits (Outlook.com line-height, image gaps). */\n img { display: block; }\n .ExternalClass { width: 100%; }\n .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div { line-height: 100%; }\n /* Dark-only images hidden in light mode; swapped in the dark block below. */\n .dl { display: none; }\n\n /* Mobile heading step-down — one-notch scale at the DS phone-only breakpoint\n @media(max-width:479px) (h1 56→48, h2 48→40, h3 40→32, h4 32→24). Keyed off the clay-h*\n css-class on the mj-text td; targets the inner div where MJML places font-size. Desktop\n size is the inline fallback if style is dropped. Per production emails, only the primary/\n hero heading opts in — add css-class=\"clay-hN\" (alongside mj-class) to the hero heading's\n mj-text; secondary content headings keep mj-class alone and stay at desktop size. */\n @media only screen and (max-width: 479px) {\n .clay-h1 > div { font-size: 48px !important; }\n .clay-h2 > div { font-size: 40px !important; }\n .clay-h3 > div { font-size: 32px !important; }\n .clay-h4 > div { font-size: 24px !important; }\n\n /* Mobile H-padding utilities — apply as css-class on mj-wrapper or mj-section to reduce\n the 40px horizontal padding to the source breakpoint value when columns stack (below 480px).\n Source: emaillove export mobile CSS (.b98-68 → 24px, .d9b-0c → 16px, .fb5-e8 → 24px).\n Targets the outer td MJML generates with inline padding-left/padding-right. */\n .email-mobile-px-24 > table > tbody > tr > td { padding-right: 24px !important; padding-left: 24px !important; }\n .email-mobile-px-16 > table > tbody > tr > td { padding-right: 16px !important; padding-left: 16px !important; }\n .email-mobile-px-0 > table > tbody > tr > td { padding-right: 0 !important; padding-left: 0 !important; }\n .email-mobile-pt-0 > table > tbody > tr > td { padding-top: 0 !important; }\n\n /* Mobile text centering — apply as css-class on mj-text elements whose content should be\n center-aligned on mobile (below 480px). Matches the source emaillove .s0>div{text-align:center}.\n Targets the inner div MJML wraps text content in. */\n .email-mobile-center > div { text-align: center !important; }\n\n /* Mobile image centering — apply css-class=\"email-mobile-center-img\" on mj-image.\n text-align on the td does not reposition its block-level child table (CSS text-align\n only affects inline content), so the nested image-wrapper table also needs margin:auto\n to actually override the mj-image align=\"left\"/\"right\" attribute on mobile. */\n .email-mobile-center-img { text-align: center !important; }\n .email-mobile-center-img > table { margin: 0 auto !important; }\n\n /* Full-width button on mobile — apply css-class=\"email-btn-full\" to mj-button.\n Makes the button's inner table fill the column width and centers it.\n Matches emaillove .mj-b-full pattern. */\n .email-btn-full > table { width: 100% !important; }\n .email-btn-full > table > tbody > tr > td { text-align: center !important; }\n }\n\n /* Left-aligned button content — apply css-class=\"email-btn-left\" to mj-button.\n Overrides MJML's default text-align:center on the inner td and anchor so\n icon+text rows (e.g. buttons-icons) are left-aligned like the emaillove source. */\n .email-btn-left > table > tbody > tr > td { text-align: left !important; }\n .email-btn-left > table > tbody > tr > td > a { text-align: left !important; }\n\n /* Decorative image tilt — apply css-class=\"email-tilt-1\"..\"email-tilt-4\" to mj-image for a\n fanned photo-stack look (e.g. an avatar composite row). Webkit/Blink clients rotate the\n image; Outlook and other non-supporting clients silently ignore the transform and show the\n image unrotated — safe graceful degradation, never a broken layout. */\n .email-tilt-1 { transform: rotate(-6deg); }\n .email-tilt-2 { transform: rotate(4deg); }\n .email-tilt-3 { transform: rotate(-4deg); }\n .email-tilt-4 { transform: rotate(6deg); }\n\n :root { color-scheme: light dark; supported-color-schemes: light dark; }\n @media (prefers-color-scheme: dark) {\n body, .email-page { background-color: #000000 !important; }\n /*\n * email-card: flip a section or column's background to dark.\n *\n * Three selectors cover every compiled MJML structure:\n * 1. .email-card — the outer div (mj-section or mj-column)\n * 2. .email-card > table — the direct child table (mj-section has inline bg here)\n * 3. .email-card > table > tbody > tr > td\n * — the content td inside mj-column (carries inline bg-color\n * + border-radius when background-color is set on mj-column)\n *\n * Apply css-class=\"email-card\" to any mj-section or mj-column that should\n * become dark. Works for grey inner cards (#f3f4f5), coloured panels, etc.\n */\n .email-card,\n .email-card > table,\n .email-card > table > tbody > tr > td { background-color: #252526 !important; }\n .email-text, .email-text * { color: #ffffff !important; }\n .ll { display: none !important; }\n .dl { display: block !important; }\n /* Black CTA button invert — apply css-class=\"email-btn-invert-dark\" to invert a black\n mj-button to white background + black text in dark mode. Matches emaillove global\n .mj-b>td { background-color:#ffffff } pattern for black CTA buttons. */\n .email-btn-invert-dark > table > tbody > tr > td { background-color: #ffffff !important; }\n .email-btn-invert-dark > table > tbody > tr > td > a { background-color: #ffffff !important; color: #000000 !important; }\n }\n /* Outlook.com + Gmail-app dark mode — these clients ignore prefers-color-scheme and instead\n prefix overridden nodes with data-ogsc (foreground) / data-ogsb (background). */\n [data-ogsb] body, [data-ogsb] .email-page { background-color: #000000 !important; }\n [data-ogsb] .email-card,\n [data-ogsb] .email-card > table,\n [data-ogsb] .email-card > table > tbody > tr > td { background-color: #252526 !important; }\n [data-ogsc] .email-text, [data-ogsc] .email-text * { color: #ffffff !important; }\n </style>\n <!-- GENERATED by src/tokens/build-email-tokens.ts — do not edit. Run `pnpm --filter @clay-design-system/email tokens:check`. -->\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"x-apple-disable-message-reformatting\" />\n <meta name=\"color-scheme\" content=\"light dark\" />\n <meta name=\"supported-color-schemes\" content=\"light dark\" />\n </head>\n <body style=\"word-spacing:normal;background-color:#f3f4f5;\">\n \n <div style=\"display:none;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;max-width:0px;opacity:0;overflow:hidden;\">Section preview — list action items</div>\n \n \n <div\n aria-label=\"List — Action items\" aria-roledescription=\"email\" style=\"background-color:#f3f4f5;\" role=\"article\" lang=\"und\" dir=\"auto\"\n >\n <!-- Fragment starts with mj-wrapper — no extra wrapper needed. --><!-- list-action-items — icon + iris-labeled inline text row list.\n Source: emaillove \"Lists\" export / Figma \"Lists\" node 1:684.\n Each row: mj-group (100%) → icon col (6.785714% = 38px) + text col (93.214286% = 522px).\n 3 list items; first at 0 top padding, items 2-3 at 24px top padding.\n Text uses inline iris (#6161ff) span for the action label + text-role (#252526) span for body.\n mj-group keeps icon + text inline at ALL viewport sizes.\n Mobile: H-padding → 24px (email-mobile-px-24 on wrapper). -->\n \n <!--[if mso | IE]><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"email-card-outlook email-mobile-px-24-outlook\" role=\"presentation\" style=\"width:640px;\" width=\"640\" bgcolor=\"#ffffff\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div class=\"email-card email-mobile-px-24\" style=\"background:#ffffff;background-color:#ffffff;margin:0px auto;max-width:640px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"background:#ffffff;background-color:#ffffff;width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"direction:ltr;font-size:0px;padding:24px 40px;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><![endif]-->\n \n <!-- Item 1: Set up an automation -->\n <!--[if mso | IE]><tr><td class=\"\" width=\"640px\" ><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"\" role=\"presentation\" style=\"width:560px;\" width=\"560\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div style=\"margin:0px auto;max-width:560px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"direction:ltr;font-size:0px;padding:0;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"\" style=\"width:560px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-100 mj-outlook-group-fix\" style=\"font-size:0;line-height:0;text-align:left;display:inline-block;width:100%;direction:ltr;\"\n >\n <!--[if mso | IE]><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" ><tr><td style=\"vertical-align:top;width:37px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-6-785714 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:6.785714%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding:0;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"center\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"border-collapse:collapse;border-spacing:0px;\"\n >\n <tbody>\n <tr>\n <td style=\"width:21px;\">\n \n <img\n alt=\"\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAABKtJREFUeAHNWU1sG0UU/mZ28+OsHZtwSLlVEYdULYhAUInKoRKNRA6tSNULnKqUiqbQIkDc+BHigtQDolBAIimHnkCVsFTAqkogB6pwqJQeaOtDVXKqUkWkTvxfe3f63jrZOK7t3XVtJ99lZzxvvJ/fvHnz5rNAg1BK6avp9AEpxD6lMCwgdipl7RBCRErjSAkpFskuLiH+BawZwzD+pvEcGoCAT6ysZF6SUh2jmUeoG/E3Gwl6YZR+xlfBYPC6n4meiSYS6WFNF2foJfvRDChEhVCfeSXsSpSWrjuVyZ6hxgnq6mg2BL4P9vS85xYSdYmurOSellrxEpkNoqUQ8aImxp4IBBZqWtQaSCaT+yHkL/Afh40iAWWNh0Kh2WqDVYmukYxRsxvtRY7IjlUj+wjR+9nsTt205tE+T1YiYZnai+Fw9+3yD2V5hzeObprsya0iyYhIzbrEXMo/3EQ0lcl82fqN4wVq0M40ZXCWPpVKPacg5rF9UDQFRiKGcY07jkeVEp+izUgk6mZHXVPC8apt2W5vFgrA1A9duHVLwzPPmjh+PF/T1jLFSDjc88+aR8W7aBNMEzg/XSLJiK89a0HqVFfwk3eXAl5Dm/DzT524cWOD3KtjhfoTFI5wpSbT6fTLaFM6+u3XDszNbZQLB0YLGB0tuE2L2OUkOfUVtAGxWAcuX+5w+nv3FnHokCtJG1Jo+4io2oMW488ZHbHfN0ju3m3i9TceeJ5PBfkwxShamuCvz2uIRjud/q5dJiaO5SGl9+/g24OkjbTDi/HduxJXruhYXvZ+Kbh5U8OFC11Of2DAxJuUijo64A98xUmm0srNzrKATz4OYHVVoLdX4dTpHPr7lSvJ6akuO2cy+vstvP9BDoEAGoLnBVh/IZP9+mw37t2r7dmF/yR+PN/pzOnrU3j7nXzDJG2ilKMSrkb0c946kUdXl3Ilu7QkMEWezOeFQ/I0rUAk4rpwtUE3WrrtykUvtgMDFiZP1ifL8XvuXLc9xuAwmTyZQ9+Tj0GSQddu2kxqwat9PbJcYJyl9vL/JZJsMzGRd41lLxCkDYhkOvs57aqP/Ey8c0fiu283lpc9FwgoIlwKed7VvLs5FTUDJGR8IS1lXoVPVPPsOkmO52aStGFZM4IP/FQ6s4QGzvtKzzKOHs3j+ReaSJLK1qDR8xRtJlGk1H8RDaDSs4cPP2g2SS6YoyxO2K6w9SRNzaFBZLOwvfpYKagGBNQQyz7OmiVTmb+apis1C6RPhULGODedk8kU6kN6FLGNwCLaetshat/2SLDCdgGLZ2VK36Yz0Fbu0tl5vldjS6HiQcMYKlf4NhUlPGCZhYNgwWrLoBK6po1VypCPVE/hcPg2q2pgwar9IJFMGw9UkR+rlnm2mkaqGtrqWarilCQlLzBbbbRuuZ4lZa9oqljrY1bFLVM/WKnglaNu4cxLEDQCQy3MBnwqfsMbpx5JhmuFz0EdMoxJPiE4AaNpULNmESP03ae8/KXj++8b1qlYAqI6ltQV4bOQ4TgUFy1LTLOe5Gemb6LOKynnllQWFjDUHiUwqCzQH2IIro0nqL1I4tsCPa9ZSl3tNYw/7CKoATwEZ+n0mgWTljUAAAAASUVORK5CYII=\" style=\"border:0;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;\" width=\"21\" height=\"auto\"\n />\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td><td style=\"vertical-align:top;width:522px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-93-214286 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:93.214286%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding-left:8px;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"left\" class=\"email-text\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <div\n style=\"font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#252526;\"\n ><span style=\"color:#6161ff !important;\">Set up an automation: </span><span>to notify your team or update a status when a payment is marked "Paid."</span></div>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table></td></tr><![endif]-->\n <!-- Item 2: Sync data across boards -->\n <!--[if mso | IE]><tr><td class=\"\" width=\"640px\" ><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"\" role=\"presentation\" style=\"width:560px;\" width=\"560\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div style=\"margin:0px auto;max-width:560px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"direction:ltr;font-size:0px;padding:24px 0 0;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"\" style=\"width:560px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-100 mj-outlook-group-fix\" style=\"font-size:0;line-height:0;text-align:left;display:inline-block;width:100%;direction:ltr;\"\n >\n <!--[if mso | IE]><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" ><tr><td style=\"vertical-align:top;width:37px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-6-785714 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:6.785714%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding:0;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"center\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"border-collapse:collapse;border-spacing:0px;\"\n >\n <tbody>\n <tr>\n <td style=\"width:21px;\">\n \n <img\n alt=\"\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAABKtJREFUeAHNWU1sG0UU/mZ28+OsHZtwSLlVEYdULYhAUInKoRKNRA6tSNULnKqUiqbQIkDc+BHigtQDolBAIimHnkCVsFTAqkogB6pwqJQeaOtDVXKqUkWkTvxfe3f63jrZOK7t3XVtJ99lZzxvvJ/fvHnz5rNAg1BK6avp9AEpxD6lMCwgdipl7RBCRErjSAkpFskuLiH+BawZwzD+pvEcGoCAT6ysZF6SUh2jmUeoG/E3Gwl6YZR+xlfBYPC6n4meiSYS6WFNF2foJfvRDChEhVCfeSXsSpSWrjuVyZ6hxgnq6mg2BL4P9vS85xYSdYmurOSellrxEpkNoqUQ8aImxp4IBBZqWtQaSCaT+yHkL/Afh40iAWWNh0Kh2WqDVYmukYxRsxvtRY7IjlUj+wjR+9nsTt205tE+T1YiYZnai+Fw9+3yD2V5hzeObprsya0iyYhIzbrEXMo/3EQ0lcl82fqN4wVq0M40ZXCWPpVKPacg5rF9UDQFRiKGcY07jkeVEp+izUgk6mZHXVPC8apt2W5vFgrA1A9duHVLwzPPmjh+PF/T1jLFSDjc88+aR8W7aBNMEzg/XSLJiK89a0HqVFfwk3eXAl5Dm/DzT524cWOD3KtjhfoTFI5wpSbT6fTLaFM6+u3XDszNbZQLB0YLGB0tuE2L2OUkOfUVtAGxWAcuX+5w+nv3FnHokCtJG1Jo+4io2oMW488ZHbHfN0ju3m3i9TceeJ5PBfkwxShamuCvz2uIRjud/q5dJiaO5SGl9+/g24OkjbTDi/HduxJXruhYXvZ+Kbh5U8OFC11Of2DAxJuUijo64A98xUmm0srNzrKATz4OYHVVoLdX4dTpHPr7lSvJ6akuO2cy+vstvP9BDoEAGoLnBVh/IZP9+mw37t2r7dmF/yR+PN/pzOnrU3j7nXzDJG2ilKMSrkb0c946kUdXl3Ilu7QkMEWezOeFQ/I0rUAk4rpwtUE3WrrtykUvtgMDFiZP1ifL8XvuXLc9xuAwmTyZQ9+Tj0GSQddu2kxqwat9PbJcYJyl9vL/JZJsMzGRd41lLxCkDYhkOvs57aqP/Ey8c0fiu283lpc9FwgoIlwKed7VvLs5FTUDJGR8IS1lXoVPVPPsOkmO52aStGFZM4IP/FQ6s4QGzvtKzzKOHs3j+ReaSJLK1qDR8xRtJlGk1H8RDaDSs4cPP2g2SS6YoyxO2K6w9SRNzaFBZLOwvfpYKagGBNQQyz7OmiVTmb+apis1C6RPhULGODedk8kU6kN6FLGNwCLaetshat/2SLDCdgGLZ2VK36Yz0Fbu0tl5vldjS6HiQcMYKlf4NhUlPGCZhYNgwWrLoBK6po1VypCPVE/hcPg2q2pgwar9IJFMGw9UkR+rlnm2mkaqGtrqWarilCQlLzBbbbRuuZ4lZa9oqljrY1bFLVM/WKnglaNu4cxLEDQCQy3MBnwqfsMbpx5JhmuFz0EdMoxJPiE4AaNpULNmESP03ae8/KXj++8b1qlYAqI6ltQV4bOQ4TgUFy1LTLOe5Gemb6LOKynnllQWFjDUHiUwqCzQH2IIro0nqL1I4tsCPa9ZSl3tNYw/7CKoATwEZ+n0mgWTljUAAAAASUVORK5CYII=\" style=\"border:0;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;\" width=\"21\" height=\"auto\"\n />\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td><td style=\"vertical-align:top;width:522px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-93-214286 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:93.214286%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding-left:8px;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"left\" class=\"email-text\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <div\n style=\"font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#252526;\"\n ><span style=\"color:#6161ff !important;\">Sync data across boards:</span><span> to keep billing status updated in a different board or project automatically.</span></div>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table></td></tr><![endif]-->\n <!-- Item 3: Integration callout -->\n <!--[if mso | IE]><tr><td class=\"\" width=\"640px\" ><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"\" role=\"presentation\" style=\"width:560px;\" width=\"560\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div style=\"margin:0px auto;max-width:560px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"direction:ltr;font-size:0px;padding:24px 0 0;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"\" style=\"width:560px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-100 mj-outlook-group-fix\" style=\"font-size:0;line-height:0;text-align:left;display:inline-block;width:100%;direction:ltr;\"\n >\n <!--[if mso | IE]><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" ><tr><td style=\"vertical-align:top;width:37px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-6-785714 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:6.785714%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding:0;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"center\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"border-collapse:collapse;border-spacing:0px;\"\n >\n <tbody>\n <tr>\n <td style=\"width:21px;\">\n \n <img\n alt=\"\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAABKtJREFUeAHNWU1sG0UU/mZ28+OsHZtwSLlVEYdULYhAUInKoRKNRA6tSNULnKqUiqbQIkDc+BHigtQDolBAIimHnkCVsFTAqkogB6pwqJQeaOtDVXKqUkWkTvxfe3f63jrZOK7t3XVtJ99lZzxvvJ/fvHnz5rNAg1BK6avp9AEpxD6lMCwgdipl7RBCRErjSAkpFskuLiH+BawZwzD+pvEcGoCAT6ysZF6SUh2jmUeoG/E3Gwl6YZR+xlfBYPC6n4meiSYS6WFNF2foJfvRDChEhVCfeSXsSpSWrjuVyZ6hxgnq6mg2BL4P9vS85xYSdYmurOSellrxEpkNoqUQ8aImxp4IBBZqWtQaSCaT+yHkL/Afh40iAWWNh0Kh2WqDVYmukYxRsxvtRY7IjlUj+wjR+9nsTt205tE+T1YiYZnai+Fw9+3yD2V5hzeObprsya0iyYhIzbrEXMo/3EQ0lcl82fqN4wVq0M40ZXCWPpVKPacg5rF9UDQFRiKGcY07jkeVEp+izUgk6mZHXVPC8apt2W5vFgrA1A9duHVLwzPPmjh+PF/T1jLFSDjc88+aR8W7aBNMEzg/XSLJiK89a0HqVFfwk3eXAl5Dm/DzT524cWOD3KtjhfoTFI5wpSbT6fTLaFM6+u3XDszNbZQLB0YLGB0tuE2L2OUkOfUVtAGxWAcuX+5w+nv3FnHokCtJG1Jo+4io2oMW488ZHbHfN0ju3m3i9TceeJ5PBfkwxShamuCvz2uIRjud/q5dJiaO5SGl9+/g24OkjbTDi/HduxJXruhYXvZ+Kbh5U8OFC11Of2DAxJuUijo64A98xUmm0srNzrKATz4OYHVVoLdX4dTpHPr7lSvJ6akuO2cy+vstvP9BDoEAGoLnBVh/IZP9+mw37t2r7dmF/yR+PN/pzOnrU3j7nXzDJG2ilKMSrkb0c946kUdXl3Ilu7QkMEWezOeFQ/I0rUAk4rpwtUE3WrrtykUvtgMDFiZP1ifL8XvuXLc9xuAwmTyZQ9+Tj0GSQddu2kxqwat9PbJcYJyl9vL/JZJsMzGRd41lLxCkDYhkOvs57aqP/Ey8c0fiu283lpc9FwgoIlwKed7VvLs5FTUDJGR8IS1lXoVPVPPsOkmO52aStGFZM4IP/FQ6s4QGzvtKzzKOHs3j+ReaSJLK1qDR8xRtJlGk1H8RDaDSs4cPP2g2SS6YoyxO2K6w9SRNzaFBZLOwvfpYKagGBNQQyz7OmiVTmb+apis1C6RPhULGODedk8kU6kN6FLGNwCLaetshat/2SLDCdgGLZ2VK36Yz0Fbu0tl5vldjS6HiQcMYKlf4NhUlPGCZhYNgwWrLoBK6po1VypCPVE/hcPg2q2pgwar9IJFMGw9UkR+rlnm2mkaqGtrqWarilCQlLzBbbbRuuZ4lZa9oqljrY1bFLVM/WKnglaNu4cxLEDQCQy3MBnwqfsMbpx5JhmuFz0EdMoxJPiE4AaNpULNmESP03ae8/KXj++8b1qlYAqI6ltQV4bOQ4TgUFy1LTLOe5Gemb6LOKynnllQWFjDUHiUwqCzQH2IIro0nqL1I4tsCPa9ZSl3tNYw/7CKoATwEZ+n0mgWTljUAAAAASUVORK5CYII=\" style=\"border:0;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;\" width=\"21\" height=\"auto\"\n />\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td><td style=\"vertical-align:top;width:522px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-93-214286 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:93.214286%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"\n >\n <tbody>\n <tr>\n <td style=\"vertical-align:top;padding-left:8px;\">\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"left\" class=\"email-text\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <div\n style=\"font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#252526;\"\n ><span>Want to go even further? Connect tools like Stripe or QuickBooks via our </span><span style=\"color:#6161ff !important;\">integrations,</span><span> </span><span style=\"color:#6161ff !important;\">API or Zapier.</span></div>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n \n \n </div>\n \n </body>\n</html>\n "
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"id": "list-feature-items",
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
Source: emaillove "Lists" export / Figma "Lists" node 1:684.
|
|
182
182
|
Each row: mj-group (100%) → icon col (6.785714% = 38px) + text col (93.214286% = 522px).
|
|
183
183
|
3 list items; first at 0 top padding, items 2-3 at 24px top padding.
|
|
184
|
-
Text uses inline iris (#6161ff) span for the action label +
|
|
184
|
+
Text uses inline iris (#6161ff) span for the action label + text-role (#252526) span for body.
|
|
185
185
|
mj-group keeps icon + text inline at ALL viewport sizes.
|
|
186
186
|
Mobile: H-padding → 24px (email-mobile-px-24 on wrapper). -->
|
|
187
187
|
|
|
@@ -295,7 +295,7 @@
|
|
|
295
295
|
>
|
|
296
296
|
|
|
297
297
|
<div
|
|
298
|
-
style="font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#
|
|
298
|
+
style="font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#252526;"
|
|
299
299
|
><span style="color:#6161ff !important;">Set up an automation: </span><span>to notify your team or update a status when a payment is marked "Paid."</span></div>
|
|
300
300
|
|
|
301
301
|
</td>
|
|
@@ -419,7 +419,7 @@
|
|
|
419
419
|
>
|
|
420
420
|
|
|
421
421
|
<div
|
|
422
|
-
style="font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#
|
|
422
|
+
style="font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#252526;"
|
|
423
423
|
><span style="color:#6161ff !important;">Sync data across boards:</span><span> to keep billing status updated in a different board or project automatically.</span></div>
|
|
424
424
|
|
|
425
425
|
</td>
|
|
@@ -543,7 +543,7 @@
|
|
|
543
543
|
>
|
|
544
544
|
|
|
545
545
|
<div
|
|
546
|
-
style="font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#
|
|
546
|
+
style="font-family:Poppins, 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:15px;font-weight:400;line-height:1.4;text-align:left;color:#252526;"
|
|
547
547
|
><span>Want to go even further? Connect tools like Stripe or QuickBooks via our </span><span style="color:#6161ff !important;">integrations,</span><span> </span><span style="color:#6161ff !important;">API or Zapier.</span></div>
|
|
548
548
|
|
|
549
549
|
</td>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clay-design-system/email",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"chokidar": "^4.0.0",
|
|
23
23
|
"cloudinary": "^2.5.1",
|
|
24
24
|
"mjml": "^4.15.3",
|
|
25
|
+
"sharp": "^0.33.5",
|
|
25
26
|
"tsx": "^4.0.0",
|
|
26
27
|
"typescript": "^5.7.0",
|
|
27
28
|
"vitest": "^2.1.0"
|
|
@@ -39,6 +40,7 @@
|
|
|
39
40
|
"library:upload": "tsx src/build/upload-library-assets.ts",
|
|
40
41
|
"library:upload:dry-run": "tsx src/build/upload-library-assets.ts --dry-run",
|
|
41
42
|
"library:generate-map": "tsx src/build/generate-stock-library-map.ts",
|
|
42
|
-
"email:resolve-visuals": "tsx src/build/visual-resolver.ts"
|
|
43
|
+
"email:resolve-visuals": "tsx src/build/visual-resolver.ts",
|
|
44
|
+
"email:placeholder": "tsx src/build/placeholder.ts"
|
|
43
45
|
}
|
|
44
46
|
}
|