From e848cc5f352e4ce351f4ba3f29af159418d6b41b Mon Sep 17 00:00:00 2001 From: limes Date: Mon, 10 Nov 2025 17:49:52 +0100 Subject: [PATCH] feat: improve compatibility with iCloud web and legacy clients --- src/assets/emails/genericTemplate.html | 15 +++++++++++---- src/assets/images/wordmark-purple-white.png | Bin 0 -> 5299 bytes ...-singlecolor-white.png => wordmark-white.png} | Bin src/mailer.ts | 4 ++-- src/util.ts | 2 +- 5 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 src/assets/images/wordmark-purple-white.png rename src/assets/images/{pretendo-wordmark-singlecolor-white.png => wordmark-white.png} (100%) diff --git a/src/assets/emails/genericTemplate.html b/src/assets/emails/genericTemplate.html index 3a92c03..059468e 100644 --- a/src/assets/emails/genericTemplate.html +++ b/src/assets/emails/genericTemplate.html @@ -50,11 +50,15 @@ color: #fff !important; font-weight: 700 !important; } - strong { + strong, b { font-weight: 700 !important; color: #9D6FF3 !important; } + img.logo { + content: url("https://assets.pretendo.cc/images/wordmark-white.png") !important; + } } + @media (prefers-color-scheme: dark) { body.email-body, table.centerer, @@ -98,14 +102,17 @@ td.notice a { color: #fff !important; } - strong { + strong, b { font-weight: 700 !important; color: #fff !important; } + /* isn't this redundant? no. icloud web doesn't display the logo correctly without this. */ img.logo { - content: url("https://assets.pretendo.cc/images/pretendo-wordmark-multicolor-purple+white.png") !important; + content: url("https://assets.pretendo.cc/images/wordmark-purple-white.png") !important; } } + + @@ -130,7 +137,7 @@ - + diff --git a/src/assets/images/wordmark-purple-white.png b/src/assets/images/wordmark-purple-white.png new file mode 100644 index 0000000000000000000000000000000000000000..66c89d53644bb1e7276065b57d3de48f26084364 GIT binary patch literal 5299 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 K0jrQT3;rKUTjt3C literal 0 HcmV?d00001 diff --git a/src/assets/images/pretendo-wordmark-singlecolor-white.png b/src/assets/images/wordmark-white.png similarity index 100% rename from src/assets/images/pretendo-wordmark-singlecolor-white.png rename to src/assets/images/wordmark-white.png diff --git a/src/mailer.ts b/src/mailer.ts index e041242..6734011 100644 --- a/src/mailer.ts +++ b/src/mailer.ts @@ -116,7 +116,7 @@ export class CreateEmail { if (plainText) { c.text = c.text.replace(linkRegex, `$ ($)`); } else { - c.text = c.text.replace(linkRegex, `$`); + c.text = c.text.replace(linkRegex, `$`); } } } @@ -139,7 +139,7 @@ export class CreateEmail { innerHTML += `\n${c.text}`; break; case 'button': - innerHTML += `\n${c.text}`; + innerHTML += `\n${c.text}`; break; } }); diff --git a/src/util.ts b/src/util.ts index 68343de..8f05d2d 100644 --- a/src/util.ts +++ b/src/util.ts @@ -203,7 +203,7 @@ export function nascError(errorCode: string): URLSearchParams { export async function sendConfirmationEmail(pnid: mongoose.HydratedDocument): Promise { const email = new CreateEmail() .addHeader('Hello {{pnid}}!', { pnid: pnid.username }) - .addParagraph('Your Pretendo Network ID activation is almost complete. Please click the link below to confirm your e-mail address and complete the activation process.') + .addParagraph('Your Pretendo Network ID activation is almost complete. Please click the link below to confirm your e-mail address and complete the activation process.') .addButton('Confirm email address', `https://api.pretendo.cc/v1/email/verify?token=${pnid.identification.email_token}`) .addParagraph('You may also enter the following 6-digit code on your console:') .addButton(pnid.identification.email_code, '', false)