themes-editorial/templates/email/editorial.ninjatpl
Alex Dunmow efbfaea74c feat: convert to codeless .bnp — templates + manifest, Go/templ deleted (WO-WZ-021)
Convert the Editorial theme from a Go+templ wasm plugin to a fully codeless
.bnp: 7 blocks + 4 built-in overrides + email wrapper transcribed templ→pongo2
.ninjatpl (byte-faithful, parity-verified 55/55 identical), 4 page templates,
blocks/blocks.yaml (fully-qualified editorial:<key>), master_pages.json, and
manifest.yaml (system/page templates, template_overrides, email_wrapper, css
input_css_append). Schemas moved schemas/→blocks/. All Go, templ, go.mod/go.sum
deleted. plugin.mod bumped 0.1.2→0.2.0, [compatibility] dropped. Makefile
rewritten to codeless targets.

Gates: ninja plugin build → (codeless, no plugin.wasm); ninja plugin verify → OK;
check-safety → OK.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 15:27:31 +08:00

15 lines
3.5 KiB
Plaintext

<!doctype html><html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="x-apple-disable-message-reformatting"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>{{ site_name }}</title><style type="text/css">
body, table, td, p, a, li, blockquote {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
img { -ms-interpolation-mode: bicubic; border: 0; height: auto; outline: none; text-decoration: none; }
body { margin: 0 !important; padding: 0 !important; width: 100% !important; }
a[x-apple-data-detectors] { color: inherit !important; text-decoration: none !important; }
@media only screen and (max-width: 620px) {
.email-container { width: 100% !important; max-width: 100% !important; }
.content-padding { padding-left: 24px !important; padding-right: 24px !important; }
}
</style></head><body style="background-color: {{ colors.background|default:"#f7f1e4" }}; margin: 0; padding: 0; font-family: var(--font-body, &amp;#39;Source Serif 4&amp;#39;, Georgia, serif);">{% if preview_text %}<div style="display: none; max-height: 0; overflow: hidden; mso-hide: all;">{{ preview_text }}</div>{% endif %}<table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td align="center" style="padding: 48px 10px; background-color: {{ colors.background|default:"#f7f1e4" }};"><table role="presentation" class="email-container" width="580" cellspacing="0" cellpadding="0" border="0" style="max-width: 580px; background-color: {{ colors.card|default:"#fbf8ec" }};"><!-- Masthead --><tr><td align="center" style="padding: 32px 40px 16px 40px;">{% if logo_url %}<img src="{{ logo_url }}" alt="{{ site_name }}" style="max-height: 48px; width: auto; display: block;">{% elif site_name %}<h1 style="margin: 0; font-family: var(--font-heading, &amp;#39;Playfair Display&amp;#39;, Georgia, serif); font-style: italic; font-weight: 900; font-size: 36px; color: {{ colors.foreground|default:"#1d1714" }}; letter-spacing: -0.02em;">{{ site_name }}</h1>{% endif %}</td></tr><!-- Hairline rule --><tr><td style="padding: 0 40px;"><table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td style="border-top: 1px solid {{ colors.border|default:"#d6cdbf" }}; font-size: 0; line-height: 0; height: 1px;">&nbsp;</td></tr></table></td></tr><!-- Body --><tr><td class="content-padding" style="padding: 32px 48px 40px 48px; color: {{ colors.foreground|default:"#1d1714" }}; font-size: 16px; line-height: 1.7; font-family: var(--font-body, &amp;#39;Source Serif 4&amp;#39;, Georgia, serif);">{{ body|safe }}</td></tr><!-- Footer --><tr><td style="padding: 24px 48px 40px 48px; border-top: 1px solid {{ colors.border|default:"#d6cdbf" }};"><table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td align="center" style="font-family: var(--font-body, &amp;#39;Inter&amp;#39;, sans-serif); font-size: 12px; color: {{ colors.mutedForeground|default:"#6e6357" }}; text-transform: uppercase; letter-spacing: 0.1em;"><p style="margin: 0 0 8px;">{{ site_name }}</p>{% if unsubscribe_url %}<p style="margin: 0; font-size: 11px;"><a href="{{ unsubscribe_url }}" style="color: #702021; text-decoration: underline;">Unsubscribe</a></p>{% endif %}</td></tr></table></td></tr></table></td></tr></table></body></html>