Templates
My saved tracks (this browser)
Track tools
Track edging
Site slope
Condition
Site photo
Track features ↕ perpendicular
Obstacles & objects
Markers
Track
Lay out your track, then hit Analyze to score safety, flow, fun, and buildability.
Lay out your track, then hit Analyze to score safety, flow, fun, and buildability.
| 1–7 | Switch placement tool (Design page) |
| Delete / Backspace | Delete the selected item |
| Esc | Finish drawing an alt/multi path, or close the open dialog |
| Ctrl+Z | Undo (⌘Z on Mac) |
| Ctrl+Shift+Z / Ctrl+Y | Redo |
| Tab / Shift+Tab | Cycle focus within an open dialog |
| ? | Open this shortcuts reference |
Conformance target: WCAG 2.1 Level AA. This is a genuinely maintained target for this tool, not a one-time claim — every roadmap item that touches the UI is checked against it before it ships, and this statement is updated alongside that work rather than left to go stale.
What's in place today:
<label for> or
aria-label), and interactive regions/tab strips carry real ARIA landmark/tab
roles with aria-selected kept in sync.aria-label.prefers-reduced-motion is respected — the 3D drive-lap animation starts
paused instead of autoplaying, and CSS transitions/animations are disabled globally.THEME_PACKS) —
is checked with a real, programmatic contrast audit (npm run test:contrast) that
walks actual rendered text/background pairs, not just a manual spot-check, and fails the build
on anything under the WCAG AA ratio for its text size.Known gaps, stated honestly: a full assistive-technology (screen-reader) pass across every feature has not been independently performed by a human tester — the automated checks above catch contrast, labeling, and keyboard-trap regressions, but they are not a substitute for that manual pass, which remains open work. Two third-party embedded widgets (Cloudflare Turnstile and Clerk's hosted sign-in UI) are outside this app's own accessibility control — their conformance is each vendor's responsibility, not this codebase's.
Feedback: if you hit an accessibility barrier using this tool, the site owner deploying this build should replace this line with a real contact method (email/form) before publishing — left as a placeholder here since this file has no fixed identity of its own until deployed.