Greet with the header's ev-eyes wordmark and a calmer welcome type scale (#184)
Welcome and sign-in now show the same animated wordmark as the sidebar header
("ev" plus the Oo eyes) instead of the teal face. The welcome tagline, subline and
buttons drop to the shared title and body sizes.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
parent
45d3f1ae11
commit
4b814c9a17
@ -1,16 +1,17 @@
|
|||||||
import { expect, test } from "@playwright/test";
|
import { expect, test } from "@playwright/test";
|
||||||
import { captureScreenshot } from "./helpers";
|
import { captureScreenshot } from "./helpers";
|
||||||
|
|
||||||
test("the welcome and sign-in screens carry the same evOo logo", async ({ page }, testInfo) => {
|
test("the welcome and sign-in screens carry the evOo wordmark from the header", async ({
|
||||||
|
page,
|
||||||
|
}, testInfo) => {
|
||||||
await page.setViewportSize({ width: 390, height: 844 });
|
await page.setViewportSize({ width: 390, height: 844 });
|
||||||
for (const scheme of ["dark", "light"] as const) {
|
for (const scheme of ["dark", "light"] as const) {
|
||||||
await page.emulateMedia({ colorScheme: scheme });
|
await page.emulateMedia({ colorScheme: scheme });
|
||||||
await page.goto("/", { waitUntil: "domcontentloaded" });
|
await page.goto("/", { waitUntil: "domcontentloaded" });
|
||||||
await expect(page.getByText("evOo", { exact: true })).toBeVisible();
|
await expect(page.locator(".evoo-mascot-container")).toBeVisible();
|
||||||
await expect(page.locator('img[src="/evoo-logo.svg"]')).toBeVisible();
|
|
||||||
await captureScreenshot(page, testInfo, `phone-welcome-${scheme}`);
|
await captureScreenshot(page, testInfo, `phone-welcome-${scheme}`);
|
||||||
await page.goto("/sign-in", { waitUntil: "domcontentloaded" });
|
await page.goto("/sign-in", { waitUntil: "domcontentloaded" });
|
||||||
await expect(page.locator('img[src="/evoo-logo.svg"]')).toBeVisible();
|
await expect(page.locator(".evoo-mascot-container")).toBeVisible();
|
||||||
await captureScreenshot(page, testInfo, `phone-sign-in-${scheme}`);
|
await captureScreenshot(page, testInfo, `phone-sign-in-${scheme}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Trans, useLingui } from "@lingui/react/macro";
|
import { Trans, useLingui } from "@lingui/react/macro";
|
||||||
import { readBoundedJsonResponse, signupRequiresEmailVerification } from "@rakazo/core";
|
import { readBoundedJsonResponse, signupRequiresEmailVerification } from "@rakazo/core";
|
||||||
import { Button, Input, Label } from "@rakazo/ui-web";
|
import { Button, EvooMascot, Input, Label } from "@rakazo/ui-web";
|
||||||
import { Eye, EyeOff } from "lucide-react";
|
import { Eye, EyeOff } from "lucide-react";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { Link, useNavigate, useSearchParams } from "react-router-dom";
|
import { Link, useNavigate, useSearchParams } from "react-router-dom";
|
||||||
@ -337,7 +337,7 @@ function AuthFrame({
|
|||||||
return (
|
return (
|
||||||
<div className="flex min-h-full items-center justify-center bg-background px-6 py-16 text-foreground">
|
<div className="flex min-h-full items-center justify-center bg-background px-6 py-16 text-foreground">
|
||||||
<form onSubmit={onSubmit} className="flex w-[460px] flex-col items-center">
|
<form onSubmit={onSubmit} className="flex w-[460px] flex-col items-center">
|
||||||
<img src="/evoo-logo.svg" alt="" className="size-[74px]" />
|
<EvooMascot size={56} showWordmark />
|
||||||
<h1 aria-live="polite" className="mb-9 mt-7 text-4xl font-medium tracking-tight">
|
<h1 aria-live="polite" className="mb-9 mt-7 text-4xl font-medium tracking-tight">
|
||||||
{title}
|
{title}
|
||||||
</h1>
|
</h1>
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { Trans } from "@lingui/react/macro";
|
import { Trans } from "@lingui/react/macro";
|
||||||
|
import { EvooMascot } from "@rakazo/ui-web";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import { WindowChrome } from "./WindowChrome";
|
import { WindowChrome } from "./WindowChrome";
|
||||||
|
|
||||||
@ -9,33 +10,28 @@ export function WelcomePage() {
|
|||||||
<div className="app-drag flex gap-2 px-5 py-[18px]">
|
<div className="app-drag flex gap-2 px-5 py-[18px]">
|
||||||
<WindowChrome />
|
<WindowChrome />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-1 flex-col items-center justify-center gap-10 px-6 pb-[90px]">
|
<div className="flex flex-1 flex-col items-center justify-center gap-8 px-6 pb-[90px]">
|
||||||
<div className="flex flex-col items-center gap-6 sm:flex-row sm:gap-[26px]">
|
<EvooMascot size={72} showWordmark interactive trackPointer="hover" />
|
||||||
<img src="/evoo-logo.svg" alt="" className="size-[88px]" />
|
<div className="max-w-[420px] space-y-2 text-center">
|
||||||
<div className="text-[76px] leading-none tracking-[-0.03em] text-foreground font-['EvOo_Display',sans-serif]">
|
<p className="text-balance text-ui-title font-medium text-foreground/90">
|
||||||
evOo
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="max-w-[520px] space-y-3 text-center">
|
|
||||||
<p className="text-balance text-[27px] leading-[1.35] text-foreground/90 font-medium">
|
|
||||||
<Trans>Your specialists. One calm place to talk.</Trans>
|
<Trans>Your specialists. One calm place to talk.</Trans>
|
||||||
</p>
|
</p>
|
||||||
<p className="text-balance text-ui-title-sm leading-[1.5] text-foreground/60">
|
<p className="text-balance text-ui-body text-foreground/60">
|
||||||
<Trans>Simple to start. Expert when you need it.</Trans>
|
<Trans>Simple to start. Expert when you need it.</Trans>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col sm:flex-row items-center gap-4">
|
<div className="flex flex-col sm:flex-row items-center gap-3">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => navigate("/sign-in")}
|
onClick={() => navigate("/sign-in")}
|
||||||
className="app-no-drag rounded-full bg-primary text-primary-foreground px-[34px] py-[15px] text-[19px] font-medium transition hover:scale-[1.04]"
|
className="app-no-drag rounded-full bg-primary text-primary-foreground px-7 py-3 text-ui-body font-medium transition hover:scale-[1.04]"
|
||||||
>
|
>
|
||||||
<Trans>Sign in</Trans> →
|
<Trans>Sign in</Trans> →
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => navigate("/sign-up")}
|
onClick={() => navigate("/sign-up")}
|
||||||
className="app-no-drag rounded-full bg-accent px-[34px] py-[15px] text-[19px] text-foreground transition hover:scale-[1.04]"
|
className="app-no-drag rounded-full bg-accent px-7 py-3 text-ui-body text-foreground transition hover:scale-[1.04]"
|
||||||
>
|
>
|
||||||
<Trans>Sign up</Trans>
|
<Trans>Sign up</Trans>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user