diff --git a/apps/site/app/[locale]/not-found.tsx b/apps/site/app/[locale]/not-found.tsx index bb7b53628c709..4c8cb8afe5f55 100644 --- a/apps/site/app/[locale]/not-found.tsx +++ b/apps/site/app/[locale]/not-found.tsx @@ -19,13 +19,15 @@ const NotFoundPage: FC = () => {
404

{t('layouts.error.notFound.title')}

-
- The Node.js mascot +
+
+ The Node.js mascot +

{t('layouts.error.notFound.description')} diff --git a/apps/site/public/static/images/smoke.gif b/apps/site/public/static/images/smoke.gif new file mode 100644 index 0000000000000..df014e59c9d17 Binary files /dev/null and b/apps/site/public/static/images/smoke.gif differ diff --git a/apps/site/styles/effects.css b/apps/site/styles/effects.css index bececd16aae56..0843d3ec82bbb 100644 --- a/apps/site/styles/effects.css +++ b/apps/site/styles/effects.css @@ -10,3 +10,47 @@ h1.special { md:leading-[4rem] md:-tracking-[0.06rem]; } + +.turtle { + @apply animate-surf + absolute + z-10 + translate-x-0 + translate-y-0; +} + +.turtle img { + @apply h-auto + w-[200]; +} + +.turtle::after { + @apply absolute + left-[-50%] + top-[50%] + -z-10 + block + h-[150] + w-[150] + rotate-[-90deg] + select-none + bg-[url('/static/images/smoke.gif')] + opacity-[0.15]; + /* stylelint-disable-next-line declaration-empty-line-before */ + content: ''; +} + +@media (max-width: 750px) { + .turtle { + @apply m-0; + } + + .turtle img { + @apply w-[100]; + } + + .turtle::after { + @apply left-[-100%] + top-[20%]; + } +} diff --git a/apps/site/tailwind.config.ts b/apps/site/tailwind.config.ts index 60992522b0ca3..4ea21ba1b8050 100644 --- a/apps/site/tailwind.config.ts +++ b/apps/site/tailwind.config.ts @@ -139,6 +139,18 @@ export default { spacing: { '4.5': '1.125rem', '18': '4.5rem' }, aria: { current: 'current="page"' }, maxWidth: { '8xl': '95rem' }, + animation: { + surf: 'surf 1s infinite ease-in-out', + }, + keyframes: { + surf: { + '0%': { transform: 'translate(0, 0)' }, + '25%': { transform: 'translate(0, 6px)' }, + '50%': { transform: 'translate(0, -6px)' }, + '75%': { transform: 'translate(0, 3px)' }, + '100%': { transform: 'translate(0, 0)' }, + }, + }, }, }, darkMode: ['class', '[data-theme="dark"]'],