- commit
- 6f9bb0e4d734f124e2c2a8f3e011847eacb594c2
- parent
- 5c1ef6f65dbf75f99fe32d59dfa019c56bceb924
- author
- Dami <dami.etoile@gmail.com>
| M | openspec/ | 2 | +- |
| M | tests/ | 14 | ++++++++++++++ |
@@ -27,7 +27,7 @@
2727 `☰ menu` thumb affordance, keeping Workshop behind that menu.2828 - [x] 3.2 Keep INDEX and open-card accessible labels synchronized with visible2929 world identity, progress, controls, and ENTER dismissal.30-- [ ] 3.3 Verify desktop and 390x844 screenshots for hierarchy, overlap,30+- [x] 3.3 Verify desktop and 390x844 screenshots for hierarchy, overlap,3131 transitions, card fitting, and footer placement, including reduced motion.3232 3333 ## 4. Verification and handoff@@ -153,6 +153,20 @@ try {
153153 await mobile.close();154154 report('mobile card, world arrow, and menu touch targets work without entering a proof');155155 156+ const reduced = await browser.newContext({ viewport: { width: 390, height: 844 }, isMobile: true, hasTouch: true, reducedMotion: 'reduce' });157+ const reducedPage = await reduced.newPage();158+ const reducedErrors = [];159+ reducedPage.on('pageerror', error => reducedErrors.push(error.message));160+ await openIndex(reducedPage);161+ await reducedPage.keyboard.press('Enter');162+ await reducedPage.waitForFunction(() => !document.querySelector('.stage-canvas')?.getAttribute('aria-label')?.includes('Press Enter to enter'));163+ await reducedPage.touchscreen.tap(337, 92);164+ await reducedPage.waitForFunction(() => document.querySelector('.stage-canvas')?.getAttribute('aria-label')?.includes('Crossword'));165+ await reducedPage.screenshot({ path: `${screenshotDir}/d20-reduced-motion-mobile.png` });166+ assert.deepEqual(reducedErrors, []);167+ await reduced.close();168+ report('reduced-motion world switching settles directly on the destination card');169+156170 assert.deepEqual(errors, []);157171 process.stdout.write(`screenshots=${screenshotDir}/d20-world-1-card.png\n`);158172 } finally {