From 4f1b9c521797ecdd11a5b26e7518448f7b291e25 Mon Sep 17 00:00:00 2001 From: Lucas Rayan Date: Tue, 18 Aug 2026 20:32:22 -0300 Subject: [PATCH] #35: keep the redesign's source ASCII The previous commit put four literal non-ASCII characters into source, which lang-lint rejects (PLAN.md 21.1: all code in English, ASCII-only, enforced by CI rather than review). Nine lines failed. The brand mark in the four rails and sign-in cards was a literal lambda, and the domains screen's meta line joined DMARC, MTA-STS and DANE with a literal middot. Both are now \u escapes, so the source is ASCII and the rendered page is unchanged - the served sign-in page emits ce bb for the mark, and the domains chunk carries the middot as \xb7. globals.css goes with them. The linter does not scan .css today, so this was passing, but the stylesheet was the only file in the tree using box-drawing section rules and em dashes, and there is no reason for it to be the exception - ASCII hyphens read the same in a comment. Verified: lang-lint clean, 98 tests green, tsc clean, production build clean. Co-Authored-By: Claude Opus 5 --- .../src/app/(admin)/admin/domains/page.tsx | 6 ++--- .../webmail/src/app/(admin)/admin/layout.tsx | 4 +-- .../src/app/(auth)/admin/login/page.tsx | 2 +- .../src/app/(auth)/user/login/page.tsx | 2 +- .../webmail/src/app/(user)/user/layout.tsx | 4 +-- services/webmail/src/app/globals.css | 26 +++++++++---------- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/services/webmail/src/app/(admin)/admin/domains/page.tsx b/services/webmail/src/app/(admin)/admin/domains/page.tsx index 586a177..d3d6002 100644 --- a/services/webmail/src/app/(admin)/admin/domains/page.tsx +++ b/services/webmail/src/app/(admin)/admin/domains/page.tsx @@ -256,9 +256,9 @@ export default function AdminDomainsPage() {
{d.name}
{t("admin.mailboxCount", { count: d.mailbox_count })} - {d.dmarc_policy ? ` · DMARC: ${d.dmarc_policy}` : ""} - {d.mta_sts_mode ? ` · MTA-STS: ${d.mta_sts_mode}` : ""} - {d.dane_enabled ? " · DANE" : ""} + {d.dmarc_policy ? ` \u00b7 DMARC: ${d.dmarc_policy}` : ""} + {d.mta_sts_mode ? ` \u00b7 MTA-STS: ${d.mta_sts_mode}` : ""} + {d.dane_enabled ? " \u00b7 DANE" : ""}
diff --git a/services/webmail/src/app/(admin)/admin/layout.tsx b/services/webmail/src/app/(admin)/admin/layout.tsx index 99641aa..3ba0171 100644 --- a/services/webmail/src/app/(admin)/admin/layout.tsx +++ b/services/webmail/src/app/(admin)/admin/layout.tsx @@ -51,7 +51,7 @@ export default function AdminLayout({ children }: { children: React.ReactNode })
- λ + {"\u03bb"}
LambdaMail
@@ -137,7 +137,7 @@ export default function AdminLayout({ children }: { children: React.ReactNode })
- λ + {"\u03bb"}
{t("common.appName")} {t("common.adminPortal")} diff --git a/services/webmail/src/app/(auth)/admin/login/page.tsx b/services/webmail/src/app/(auth)/admin/login/page.tsx index d87b7a3..6570ec0 100644 --- a/services/webmail/src/app/(auth)/admin/login/page.tsx +++ b/services/webmail/src/app/(auth)/admin/login/page.tsx @@ -108,7 +108,7 @@ export default function AdminLoginPage() { different product. */}
- λ + {"\u03bb"}

{t("auth.adminLoginTitle")}

diff --git a/services/webmail/src/app/(auth)/user/login/page.tsx b/services/webmail/src/app/(auth)/user/login/page.tsx index 4fdf22f..8b254ce 100644 --- a/services/webmail/src/app/(auth)/user/login/page.tsx +++ b/services/webmail/src/app/(auth)/user/login/page.tsx @@ -59,7 +59,7 @@ export default function UserLoginPage() {
- λ + {"\u03bb"}

{t("auth.userLoginTitle")}

diff --git a/services/webmail/src/app/(user)/user/layout.tsx b/services/webmail/src/app/(user)/user/layout.tsx index a917ace..498e2d6 100644 --- a/services/webmail/src/app/(user)/user/layout.tsx +++ b/services/webmail/src/app/(user)/user/layout.tsx @@ -59,7 +59,7 @@ export default function UserWebmailLayout({ children }: { children: React.ReactN the only thing that says which one you are in. */}
- λ + {"\u03bb"}
LambdaMail
@@ -215,7 +215,7 @@ export default function UserWebmailLayout({ children }: { children: React.ReactN
- λ + {"\u03bb"}
LambdaMail
diff --git a/services/webmail/src/app/globals.css b/services/webmail/src/app/globals.css index 0411082..d00f27e 100644 --- a/services/webmail/src/app/globals.css +++ b/services/webmail/src/app/globals.css @@ -5,7 +5,7 @@ @tailwind utilities; /** - * Nocturne — the one visual language for both surfaces. + * Nocturne - the one visual language for both surfaces. * * The webmail used to be indigo over glass and the console green over glass, * so the two halves of the same product did not look related. Everything below @@ -62,9 +62,9 @@ h1, h2, h3, h4, h5, h6 { background: rgba(145, 132, 217, 0.3); } -/* ──────────────────────────────────────────────────────────────────────── +/* -------------------------------------------------------------------- Surfaces - ──────────────────────────────────────────────────────────────────────── */ + -------------------------------------------------------------------- */ /** A code or DNS-record block: the darkest ground, monospace, accent ink. */ .lm-code { @@ -78,7 +78,7 @@ h1, h2, h3, h4, h5, h6 { } /** - * A rule that fades to transparent at both ends rather than stopping cleanly — + * A rule that fades to transparent at both ends rather than stopping cleanly - * the one Nocturne signature that has to be CSS, because Tailwind has no * gradient border. */ @@ -94,13 +94,13 @@ h1, h2, h3, h4, h5, h6 { ); } -/* ──────────────────────────────────────────────────────────────────────── +/* -------------------------------------------------------------------- Navigation, rows and chips - ──────────────────────────────────────────────────────────────────────── */ + -------------------------------------------------------------------- */ /** * A sidebar item. The 3px mark on the left is the accent's whole appearance - * here — an active item is not a filled pill. Nothing in this block is sized + * here - an active item is not a filled pill. Nothing in this block is sized * by its text: the label wraps to a second line instead of being clipped, * which is what broke when the interface was read in Portuguese or Spanish. */ @@ -202,9 +202,9 @@ h1, h2, h3, h4, h5, h6 { box-shadow: inset 0 0 0 1px var(--lm-edge); } -/* ──────────────────────────────────────────────────────────────────────── - Tables — the header and the row rules fade at their ends, as the rules do - ──────────────────────────────────────────────────────────────────────── */ +/* -------------------------------------------------------------------- + Tables - the header and the row rules fade at their ends, as the rules do + -------------------------------------------------------------------- */ .lm-table { width: 100%; @@ -258,9 +258,9 @@ h1, h2, h3, h4, h5, h6 { no-repeat bottom / 100% 1px; } -/* ──────────────────────────────────────────────────────────────────────── - Scrollbars — a thin neutral thumb on no track - ──────────────────────────────────────────────────────────────────────── */ +/* -------------------------------------------------------------------- + Scrollbars - a thin neutral thumb on no track + -------------------------------------------------------------------- */ ::-webkit-scrollbar { width: 8px;