Custom Frutiger Aero 404

app/not-found.tsx renders a standalone screen: the root layout's ice
scene is the backdrop, the glass card/rim/bubbles come from the shared
recipes (full Aero with that theme on, frosted glass in light/dark),
and the mascot is the scene's glossy ice orb at full strength with a
snowflake and a "404" chip. Two ways out - back to the library and
into the chat - both 44px targets, en + cs.

The regression suite pins the 404 status, both links and the Czech
copy; the pixel-contrast scan covers the screen in all three themes.
The service worker no longer caches non-OK navigations as the offline
shell (a typo'd URL used to write the error page into the shell
cache). Version 0.5.6, SW -> freezmo-v78.
This commit is contained in:
Martin Dvořák 2026-10-14 15:27:47 +00:00
commit 7e42b03f7e
9 changed files with 137 additions and 4 deletions

View file

@ -630,6 +630,13 @@ const en: Record<string, string> = {
"offline.body":
"Freezmo needs a connection for generating decks and grading answers. Your saved decks are still in this browser — reconnect and reload.",
/* not found ------------------------------------------------------- */
"notFound.title": "This page melted away",
"notFound.hint":
"The link may be old, or the address has a typo. Your decks are safe in this browser — head back home.",
"notFound.home": "Back to library",
"notFound.chat": "Ask the chat instead",
/* activity types -------------------------------------------------- */
"type.flashcard": "Flashcard",
"type.multipleChoice": "Multiple choice",
@ -1614,6 +1621,13 @@ const cs: Record<string, string> = {
"offline.body":
"Freezmo potřebuje připojení k vytváření sad a známkování odpovědí. Uložené sady máš pořád v tomto prohlížeči — připoj se a načti stránku znovu.",
/* not found ------------------------------------------------------- */
"notFound.title": "Tahle stránka se rozpustila",
"notFound.hint":
"Odkaz může být zastaralý nebo je v adrese překlep. Tvoje sady jsou v tomto prohlížeči v pořádku — vrať se domů.",
"notFound.home": "Zpět do knihovny",
"notFound.chat": "Zeptat se chatu",
/* activity types -------------------------------------------------- */
"type.flashcard": "Kartička",
"type.multipleChoice": "Výběr z možností",