feat(webmail): the new interface - logo, dark and light themes, command menu

A mark (a lambda on an ultramarine tile with the flap of an envelope), the
favicon, home-screen icons and an install manifest. Every colour is a variable
defined once per theme, and the Tailwind scales the screens already use read
them, so dark (the default) and light are a change of values and not of
classes. Geist is served by the app itself. Ctrl+K opens a command menu for
folders, actions, accounts and appearance, and typing something that matches no
command searches the mail; c writes a message and / goes to the search field.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas RayanandClaude Sonnet 5.5 committed 2026-10-22 22:33:15 -03:00
1 parent 6b97807856
commit e667843b59
38 files changed
+1161 -316

No files matched your search

@@ -4,6 +4,8 @@ import React, { useState } from "react";
import { Mail, Lock, AlertCircle } from "lucide-react";
import { useTranslations } from "../../../../i18n/provider";
import { Button } from "../../../../components/ui/Button";
import { Logo } from "../../../../components/Logo";
import { ThemeToggle } from "../../../../components/ThemeToggle";
export default function UserLoginPage() {
const t = useTranslations();
@@ -55,12 +57,11 @@ export default function UserLoginPage() {
/* No ambient glow behind the card any more: two blurred coloured circles
under a sign-in form are decoration that costs a full-viewport paint and
says nothing. Nocturne's depth is the surface and its edge. */
<div className="flex min-h-screen items-center justify-center bg-dark-bg px-4">
<div className="relative flex min-h-screen items-center justify-center bg-dark-bg px-4">
<ThemeToggle className="absolute right-4 top-4" />
<div className="w-full max-w-[400px] rounded-2xl bg-dark-panel p-7 shadow-edge">
<div className="mb-6 flex items-center gap-3">
<div className="flex h-10 w-10 flex-none items-center justify-center rounded-xl bg-dark-card text-xl leading-none text-indigo-500 shadow-[inset_0_0_0_1px_#9184d9]">
{"\u03bb"}
</div>
<Logo size={40} className="flex-none" />
<div className="min-w-0">
<h1 className="text-lg font-medium leading-tight text-slate-100">{t("auth.userLoginTitle")}</h1>
<p className="mt-0.5 text-[12.5px] text-slate-400">