soroban-abacus-flashcards/apps/web
Thomas Hallock 1729418dc5 feat(know-your-world): full-screen layout with squish-through pointer lock escape
Implement full-screen, no-scrolling layout for Know Your World game with seamless
pointer lock UX:

## Layout Changes
- Add react-resizable-panels for vertical panel layout (info top, map bottom)
- Wrap playing phase with StandardGameLayout for 100vh no-scroll behavior
- Extract game info (prompt, progress, error) into compact GameInfoPanel
- Map panel fills remaining space with ResizeObserver for dynamic scaling
- SVG uses aspect-ratio to prevent distortion during panel resize

## Pointer Lock UX
- Remove obtrusive "Enable Precision Controls" prompt entirely
- First click silently enables pointer lock (seamless gameplay)
- Cursor squish-through escape at boundaries:
  - 40px dampen zone: movement slows quadratically near edges
  - 20px squish zone: cursor visually compresses (50%) and stretches (140%)
  - 2px escape threshold: pointer lock releases when squished through
- Custom cursor distortion provides visual feedback for escape progress

## Testing
- Unit tests: GameInfoPanel (20+ tests), PlayingPhase (15+ tests)
- E2E tests: Layout, panel resizing, magnifier behavior
- Update vitest config with Panda CSS aliases

## Technical Details
- ResizeObserver replaces window resize listeners for panel-aware updates
- Labels and magnifier recalculate on panel resize
- All magnifier math preserved (zoom, region indicator, coordinate transforms)
- Boundary dampening uses quadratic easing for natural feel
- Squish effect animates with 0.1s ease-out transition

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 21:50:13 -06:00
..
.claude feat(know-your-world): full-screen layout with squish-through pointer lock escape 2025-11-22 21:50:13 -06:00
.storybook fix: refactor worksheet config persistence to blacklist approach + Storybook stories 2025-11-13 11:26:36 -06:00
__tests__
content/blog
data
docs
drizzle
e2e feat(know-your-world): full-screen layout with squish-through pointer lock escape 2025-11-22 21:50:13 -06:00
public
scripts
src feat(know-your-world): full-screen layout with squish-through pointer lock escape 2025-11-22 21:50:13 -06:00
.dockerignore.test
.gitignore
CARD_SORTING_PORT_PLAN.md
COMPLEMENT_RACE_PORT_PLAN.md
DEVELOPMENT_STANDARDS.md
LINTING.md
README.md
biome.jsonc
drizzle.config.ts
eslint.config.js
next-env.d.ts
next.config.js fix: configure Next.js to transpile @svg-maps ES modules 2025-11-20 09:15:53 -06:00
package.json Revert "feat: use big.js for arbitrary precision in cursor and zoom math" 2025-11-19 19:24:07 -06:00
panda.config.ts fix: refactor worksheet config persistence to blacklist approach + Storybook stories 2025-11-13 11:26:36 -06:00
playwright.config.ts
pnpm-lock.yaml
server.js debug: add error handling for socket-server require to see actual failure 2025-11-20 05:51:24 -06:00
svg-processing-test.js
test-arcade-api.sh
test-flashcards-final.pdf
test-flashcards.pdf
test-simplified.pdf
test_fullscreen_persistence.html
test_panda_simple.html
tsconfig.json
tsconfig.server.json fix: use dynamic ES module imports for @svg-maps packages in know-your-world 2025-11-22 12:16:54 -06:00
vitest.config.ts feat(know-your-world): full-screen layout with squish-through pointer lock escape 2025-11-22 21:50:13 -06:00

README.md

Test deployment - Mon Nov 3 16:31:57 CST 2025