← Templates<Email>
Keel sign-in code
A bank's sign-in code, in a narrow column of the system's own font.
keel. (https://keel.example) YOUR SIGN-IN CODE Enter it in the Keel app to finish signing in. It works once, for the next ten minutes. 482 913 Expires at 06:52 GMT Who asked for it Device | Safari on a Mac Near | Lisbon, Portugal When | 06:42 GMT, Friday 6 November Not you? Don’t share this code with anyone, even someone who says they’re from Keel. Freeze your cards in the app, or call us any time on 0808 157 0412 (tel:+448081570412). We’ll never ask for this code by phone, email or text. Keel Bank Ltd, 12 Lantern Yard, London E1 6QL.
Email 480px: background #ffffff
Section 480px
Text 432px "keel. (https://keel.example)"
Column 432px
Heading h1 432px "Your sign-in code"
Text 432px "Enter it in the Keel app to finish signing in. It works once, for the next ten …"
Column 432px: background #f3f4f2
Text 376px "482 913"
Text 376px "Expires at 06:52 GMT"
Column 432px
Text 432px "Who asked for it"
Table 432px
TableRow 432px
TableCell 96px "Device"
TableCell 336px "Safari on a Mac"
TableRow 432px
TableCell 96px "Near"
TableCell 336px "Lisbon, Portugal"
TableRow 432px
TableCell 96px "When"
TableCell 336px "06:42 GMT, Friday 6 November"
Row 432px: 1 side by side
Column 416px
Text 416px "Not you?"
Text 416px "Don’t share this code with anyone, even someone who says they’re from Keel. Fre…"
Text 432px "We’ll never ask for this code by phone, email or text. Keel Bank Ltd, 12 Lanter…"- infoemail/degraded
fonts on this Email in email: Apple Mail and iOS Mail load web fonts; Gmail and classic Outlook don't, and show the next font in each stack
root.props.fonts - infoemail/outlook-degraded
letterSpacing on this Text in classic Outlook: normal spacing: Word keeps letter spacing but doesn't draw it
root.children[0].children[0].style.letterSpacing - infoemail/outlook-degraded
letterSpacing on this Heading in classic Outlook: normal spacing: Word keeps letter spacing but doesn't draw it
root.children[0].children[1].children[0].style.letterSpacing - infoemail/outlook-degraded
borderRadius on this Column in classic Outlook: square corners
root.children[0].children[2].style.borderRadius - infoemail/outlook-degraded
letterSpacing on this Text in classic Outlook: normal spacing: Word keeps letter spacing but doesn't draw it
root.children[0].children[2].children[0].style.letterSpacing
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html lang="en-GB" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="x-apple-disable-message-reformatting"><!--[if !mso]><!--><meta http-equiv="X-UA-Compatible" content="IE=edge"><!--<![endif]--><meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no"><meta name="color-scheme" content="light"><meta name="supported-color-schemes" content="light"><!--[if mso]><xml><o:OfficeDocumentSettings><o:AllowPNG/><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml><![endif]--><title>Your Keel sign-in code</title><!--[if !mso]><!--><style>@font-face{font-family:"DM Mono";src:url("https://fonts.gstatic.com/s/dmmono/v16/aFTR7PB1QTsUX8KYvumzEYOtbYf-Vlg.woff2") format("woff2");font-weight:500}</style><!--<![endif]--><style>table,td{mso-table-lspace:0pt;mso-table-rspace:0pt;border-collapse:collapse}img{-ms-interpolation-mode:bicubic}a[x-apple-data-detectors]{color:inherit!important;text-decoration:none!important}@media (max-width: 500px){.etjyqx{padding-bottom:28px!important}.e0n4yb{font-size:40px!important;letter-spacing:8px!important;line-height:44px!important}.en1a8t{padding:22px 20px!important}.el71hh{padding-top:32px!important;padding-bottom:40px!important}}</style></head><body style="margin:0;padding:0;-webkit-text-size-adjust:100%;background-color:#fff"><div style="display:none;max-height:0;overflow:hidden;mso-hide:all" aria-hidden="true" data-skip-in-text="true">482 913 is your code to sign in to Keel. It works once, for ten minutes.͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ </div><div role="article" aria-roledescription="email" aria-label="Your Keel sign-in code" lang="en-GB" style="background-color:#fff;overflow-wrap:break-word;word-break:break-word"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" bgcolor="#ffffff" style="background-color:#fff"><tr><td align="center" class="el71hh" style="padding-top:48px;padding-bottom:56px"><!--[if mso]><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="480" align="center"><tr><td><![endif]--><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="max-width:480px"><tr><td style="padding:0 24px 0 24px"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td class="etjyqx" style="padding-bottom:32px"><p style="margin:0;color:#0b0d0c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:22px;font-weight:700;line-height:22px;mso-line-height-rule:exactly;letter-spacing:-0.6px;text-align:left"><a href="https://keel.example" style="color:#0b0d0c;text-decoration:none">keel<span style="color:#0f5c45">.</span></a></p></td></tr><tr><td class="etjyqx" style="padding-bottom:32px"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td style="padding-bottom:10px"><h1 style="margin:0;color:#0b0d0c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:26px;font-weight:600;line-height:31.2px;mso-line-height-rule:exactly;letter-spacing:-0.4px;text-align:left">Your sign-in code</h1></td></tr><tr><td><p style="margin:0;color:#5a5f5c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:16px;line-height:24.8px;mso-line-height-rule:exactly;text-align:left">Enter it in the Keel app to finish signing in. It works once, for the next ten minutes.</p></td></tr></table></td></tr><tr><td class="etjyqx" style="padding-bottom:32px"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="border-collapse:separate"><tr><td class="en1a8t" bgcolor="#f3f4f2" style="padding:26px 28px;background-color:#f3f4f2;border-radius:10px"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td style="padding-bottom:6px"><p class="e0n4yb" style="margin:0;color:#0b0d0c;font-family:'DM Mono', SFMono-Regular, Menlo, Consolas, monospace;font-size:46px;font-weight:500;line-height:50.6px;mso-line-height-rule:exactly;letter-spacing:10px;text-align:left">482 913</p></td></tr><tr><td><p style="margin:0;color:#5a5f5c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:13px;line-height:20.15px;mso-line-height-rule:exactly;text-align:left">Expires at 06:52 GMT</p></td></tr></table></td></tr></table></td></tr><tr><td class="etjyqx" style="padding-bottom:32px"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td style="padding-bottom:8px"><p style="margin:0;color:#5a5f5c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:13px;font-weight:600;line-height:20.15px;mso-line-height-rule:exactly;text-align:left">Who asked for it</p></td></tr><tr><td><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="border-collapse:separate"><tr><td style="border-top:1px solid #e2e4e2;border-bottom:1px solid #e2e4e2"><table cellpadding="0" cellspacing="0" border="0" width="100%" style="table-layout:fixed;border-collapse:separate"><colgroup><col width="96" style="width:96px"><col width="336" style="width:auto"></colgroup><tbody><tr><td width="96" valign="top" style="color:#5a5f5c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:15px;line-height:21.75px;mso-line-height-rule:exactly;text-align:left;width:96px;box-sizing:border-box;padding:10px 12px 10px 0;border-bottom:1px solid #e2e4e2">Device</td><td width="336" valign="top" style="color:#0b0d0c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:15px;line-height:21.75px;mso-line-height-rule:exactly;text-align:left;width:auto;box-sizing:border-box;padding:10px 0;border-bottom:1px solid #e2e4e2">Safari on a Mac</td></tr><tr><td width="96" valign="top" style="color:#5a5f5c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:15px;line-height:21.75px;mso-line-height-rule:exactly;text-align:left;width:96px;box-sizing:border-box;padding:10px 12px 10px 0;border-bottom:1px solid #e2e4e2">Near</td><td width="336" valign="top" style="color:#0b0d0c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:15px;line-height:21.75px;mso-line-height-rule:exactly;text-align:left;width:auto;box-sizing:border-box;padding:10px 0;border-bottom:1px solid #e2e4e2">Lisbon, Portugal</td></tr><tr><td width="96" valign="top" style="color:#5a5f5c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:15px;line-height:21.75px;mso-line-height-rule:exactly;text-align:left;width:96px;box-sizing:border-box;padding:10px 12px 10px 0">When</td><td width="336" valign="top" style="color:#0b0d0c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:15px;line-height:21.75px;mso-line-height-rule:exactly;text-align:left;width:auto;box-sizing:border-box;padding:10px 0">06:42 GMT, Friday 6 November</td></tr></tbody></table></td></tr></table></td></tr></table></td></tr><tr><td class="etjyqx" style="padding-bottom:32px"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="border-collapse:separate"><tr><td style="padding:0 0 0 14px;border-left:2px solid #0f5c45"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td width="416" valign="top" style="width:416px"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td style="padding-bottom:6px"><p style="margin:0;color:#0b0d0c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:16px;font-weight:600;line-height:24.8px;mso-line-height-rule:exactly;text-align:left">Not you?</p></td></tr><tr><td><p style="margin:0;color:#5a5f5c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:15px;line-height:23.25px;mso-line-height-rule:exactly;text-align:left">Don’t share this code with anyone, even someone who says they’re from Keel. Freeze your cards in the app, or call us any time on <a href="tel:+448081570412" style="color:#0f5c45;font-weight:600;text-decoration:underline">0808 157 0412</a>.</p></td></tr></table></td></tr></table></td></tr></table></td></tr><tr><td><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="border-collapse:separate"><tr><td style="padding:24px 0 0 0;border-top:1px solid #e2e4e2"><p style="margin:0;color:#5a5f5c;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;font-size:13px;line-height:20.8px;mso-line-height-rule:exactly;text-align:left">We’ll never ask for this code by phone, email or text. Keel Bank Ltd, 12 Lantern Yard, London E1 6QL.</p></td></tr></table></td></tr></table></td></tr></table><!--[if mso]></td></tr></table><![endif]--></td></tr></table></div></body></html>/**
* Keel (a fictional bank) sends a sign-in code.
*
* A security message should look like nothing but itself: a narrow column, the system's own font
* (it's already on the phone, so nothing loads before the code shows), the code large in DM Mono
* so no digit can be mistaken for another, and who asked for it. One deep green, for the bank's
* mark and the way out if it wasn't you.
*/
import { Column, Email, Heading, Link, Text, Row, Section, Span, Table, TableCell, TableRow } from "@hyper-elements/react";
const INK = "#0B0D0C";
const QUIET = "#5A5F5C";
const RULE = "#E2E4E2";
const PANEL = "#F3F4F2";
const GREEN = "#0F5C45";
const SYSTEM = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif";
const MONO = "'DM Mono', SFMono-Regular, Menlo, Consolas, monospace";
const SITE = "https://keel.example";
/** A line of who asked for the code. */
const asked = (name: string, value: string, last = false) => (
<TableRow>
<TableCell style={{ width: 96, padding: [10, 12, 10, 0], color: QUIET, verticalAlign: "top", border: last ? undefined : { bottom: `1px solid ${RULE}` } }}>{name}</TableCell>
<TableCell style={{ padding: [10, 0], verticalAlign: "top", border: last ? undefined : { bottom: `1px solid ${RULE}` } }}>{value}</TableCell>
</TableRow>
);
export default function KeelSignInCode() {
return (
<Email
width={480}
lang="en-GB"
title="Your Keel sign-in code"
previewText="482 913 is your code to sign in to Keel. It works once, for ten minutes."
fonts={[{ family: "DM Mono", src: "https://fonts.gstatic.com/s/dmmono/v16/aFTR7PB1QTsUX8KYvumzEYOtbYf-Vlg.woff2", format: "woff2", weight: 500 }]}
style={{ backgroundColor: "#FFFFFF", color: INK, fontFamily: SYSTEM, fontSize: 16, lineHeight: 1.55 }}
>
<Section style={{ padding: [48, 24, 56], gap: 32 }} mobile={{ padding: [32, 24, 40], gap: 28 }}>
<Text style={{ fontSize: 22, fontWeight: 700, letterSpacing: -0.6, lineHeight: 1 }}>
<Link href={SITE} style={{ color: INK, textDecoration: "none" }}>
keel<Span style={{ color: GREEN }}>.</Span>
</Link>
</Text>
<Column style={{ gap: 10 }}>
<Heading level={1} style={{ fontSize: 26, fontWeight: 600, lineHeight: 1.2, letterSpacing: -0.4 }}>
Your sign-in code
</Heading>
<Text style={{ color: QUIET }}>Enter it in the Keel app to finish signing in. It works once, for the next ten minutes.</Text>
</Column>
<Column style={{ backgroundColor: PANEL, borderRadius: 10, padding: [26, 28], gap: 6 }} mobile={{ padding: [22, 20] }}>
<Text style={{ fontFamily: MONO, fontSize: 46, fontWeight: 500, letterSpacing: 10, lineHeight: 1.1 }} mobile={{ fontSize: 40, letterSpacing: 8 }}>
482 913
</Text>
<Text style={{ fontSize: 13, color: QUIET }}>Expires at 06:52 GMT</Text>
</Column>
<Column style={{ gap: 8 }}>
<Text style={{ fontSize: 13, fontWeight: 600, color: QUIET }}>Who asked for it</Text>
<Table style={{ fontSize: 15, lineHeight: 1.45, border: { top: `1px solid ${RULE}`, bottom: `1px solid ${RULE}` } }}>
{asked("Device", "Safari on a Mac")}
{asked("Near", "Lisbon, Portugal")}
{asked("When", "06:42 GMT, Friday 6 November", true)}
</Table>
</Column>
<Row stackOnMobile={false} style={{ gap: 14, padding: [0, 0, 0, 14], border: { left: `2px solid ${GREEN}` } }}>
<Column style={{ gap: 6 }}>
<Text style={{ fontWeight: 600 }}>Not you?</Text>
<Text style={{ fontSize: 15, color: QUIET }}>
Don’t share this code with anyone, even someone who says they’re from Keel. Freeze your cards in the app, or call us any time on{" "}
<Link href="tel:+448081570412" style={{ color: GREEN, fontWeight: 600 }}>
0808 157 0412
</Link>
.
</Text>
</Column>
</Row>
<Text style={{ fontSize: 13, lineHeight: 1.6, color: QUIET, padding: [24, 0, 0], border: { top: `1px solid ${RULE}` } }}>
We’ll never ask for this code by phone, email or text. Keel Bank Ltd, 12 Lantern Yard, London E1 6QL.
</Text>
</Section>
</Email>
);
}import { render } from "@hyper-elements/react";
import KeelSignInCode from "./keel-sign-in-code";
const { html, text } = await render(<KeelSignInCode />);