* Read agent replies at the size of the user's own messages Chat markdown set its own 17px reading size scaled for phones, so agent replies rendered at about 19px while the user's bubbles on the same phone read at 16px. The markdown now takes size and leading from the bubble around it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ * Show the same evOo logo on the welcome and sign-in screens The welcome screen showed the eyes-only mascot over an "EvOo" title, while sign-in and sign-up showed the teal face (the favicon and app icon) through a CSS override of the old two-pill markup. Both screens now render the teal logo directly, the title reads "evOo", and the CSS override is gone. The welcome lines balance so no word sits alone. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ * Run the autopilot auto-merge job on Linux runners again The macOS runners that joined the evoo-ci pool have no gh on the runner's PATH, so the job died with "gh: command not found" whenever one of them picked it up. The job takes seconds, so it gains nothing from the extra runners. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ --------- Co-authored-by: Claude <noreply@anthropic.com>
45 lines
1.9 KiB
TypeScript
45 lines
1.9 KiB
TypeScript
import { expect, type Locator, test } from "@playwright/test";
|
|
import { captureScreenshot, completeOnboarding, signup } from "./helpers";
|
|
|
|
async function fontSize(locator: Locator) {
|
|
return locator.evaluate((element) => Number.parseFloat(getComputedStyle(element).fontSize));
|
|
}
|
|
|
|
test("phone widths read text at 16px and up while desktop keeps its sizes", async ({
|
|
page,
|
|
}, testInfo) => {
|
|
const stamp = Date.now();
|
|
await signup(page, `mobile-font-${stamp}@rakazo.test`, "password12", "Font QA");
|
|
await completeOnboarding(page);
|
|
|
|
const composer = page.getByRole("combobox", { name: /^Message/ });
|
|
await composer.fill("Please review `shared/PROJECT_CHECKPOINT_WRAPUP.md`.");
|
|
await composer.press("Enter");
|
|
const reply = page
|
|
.getByTestId("transcript")
|
|
.locator("[data-message-id]")
|
|
.filter({ hasText: "done. i handled:" });
|
|
await expect(reply).toBeVisible({ timeout: 30_000 });
|
|
|
|
const smallText = page.locator(".text-ui-body-sm").first();
|
|
const desktopSmall = await fontSize(smallText);
|
|
expect(desktopSmall).toBe(14);
|
|
|
|
await page.setViewportSize({ width: 390, height: 844 });
|
|
await expect.poll(() => fontSize(smallText)).toBeCloseTo(16, 1);
|
|
expect(await fontSize(composer)).toBeGreaterThanOrEqual(16);
|
|
const userText = page.getByTestId("message-user-bubble").last();
|
|
const replyText = reply.locator(".rk-chat-markdown p").first();
|
|
expect(await fontSize(replyText)).toBe(await fontSize(userText));
|
|
|
|
await page.emulateMedia({ colorScheme: "dark" });
|
|
await expect(page.locator("html")).toHaveAttribute("data-theme", "dark");
|
|
await captureScreenshot(page, testInfo, "mobile-font-size-dark");
|
|
await page.emulateMedia({ colorScheme: "light" });
|
|
await expect(page.locator("html")).toHaveAttribute("data-theme", "light");
|
|
await captureScreenshot(page, testInfo, "mobile-font-size-light");
|
|
|
|
await page.setViewportSize({ width: 1280, height: 720 });
|
|
await expect.poll(() => fontSize(smallText)).toBe(desktopSmall);
|
|
});
|