feat(footer): credit Recurssive at the foot of the footer
What changes
The site footer now ends with a studio credit: the Reflow mark and "Developed and designed by Recurssive", linking to recurssive.com. It sits centred under the Ravensburger notice, at the footer's FONT_SIZES.xs.
apps/web/src/shared/components/RecurssiveCredit.tsxis Inkweave's own copy of Recurssive's shared footer credit, its plain variant.- It's restyled with Inkweave's tokens (owner, 2026-11-05) instead of Recurssive's purples, so it needs no exemption from the design-token rules.
- It rests in
COLORS.textMutedlike the footer's links. On hover the text lifts toCOLORS.textand the mark turnsCOLORS.primary, throughuseHoverasLinkButtondoes. - The link is
rel="noopener nofollow": it repeats in the footer of every page, and Google lists "widely distributed links in the footers or templates of various sites" under link spam.
RecurssiveCredit.stories.tsxis its story, forcheck:stories.Footer.tsxrenders it as the footer's last line.
Hooks skipped (owner-approved)
Both the commit and the push used --no-verify. On Windows, master's own suite fails here:
tsc -bstops with 8 errors.- 28 tests fail in
BinderShelf.test.tsxanduseBrowseCollection.test.tsx.
Both come from binders/BinderShelf.tsx and binders/binderShelf.ts differing only in letter case, which a case-insensitive filesystem can't tell apart. The same two test files fail with this change set aside. CI on Linux is the first full run of typecheck, E2E and CodeScene on this change.
Verification
Run on Windows:
- ESLint (with the
inkweave/*rules),check:design,check:storiesandknippass for these files. Knip's two unused files are the binder-shelf pair, already on master. - Vitest: 247 of 249 test files pass. The 2 that fail are the binder-shelf files above.
CardPage.test.tsx, the test that renders the Footer, passes. - Browser, dev server:
- On
/aboutat desktop width, the credit is centred and hasrel="noopener nofollow",textMuted, 10px. Hovering givestextand a#ffb900mark. - On
/at 375px, it's the footer's last line, with nothing fixed covering it. - No console errors.
- On
Summary by cubic
Adds a studio credit at the foot of the site footer: the Reflow mark and "Developed and designed by Recurssive", linking to recurssive.com.
- Renders an Inkweave-local copy of Recurssive's shared footer credit, restyled with Inkweave's design tokens (
textMutedat rest,textwith a brand-gold mark on hover or keyboard focus) so it passes the design-token rules without an exemption. - Lights on keyboard focus only, since a click's focus outlasts the click when the link opens a new tab.
- The credit's
minHeightisTOUCH_TARGET(44px), since its 10px line alone was under WCAG 2.5.8's 24px minimum; the footer grows 32px. - The mark is sized from its 120×80 viewBox (
1.5em×1em), since WebKit can scale an inline SVG flex item to its 300px default atwidth: auto. - The link is
rel="noopener nofollow", since it repeats in the footer of every page. - Adds a Storybook story for the component.
- Raises the User-facing JS budget to 469 kB, since the credit's ~0.9 kB pushes master's 467,979 bytes past the 468 kB limit.
Note on verification
Both the commit and push used --no-verify (owner-approved): on Windows, master's own suite fails to typecheck and 28 tests fail in BinderShelf.test.tsx and useBrowseCollection.test.tsx, caused by binders/BinderShelf.tsx and binders/binderShelf.ts differing only in letter case on a case-insensitive filesystem. The same failures occur with this change set aside.