[{"id":"sprint","name":"Sprint","blurb":"60 seconds. Hit 60 wpm at 95% accuracy.","mode":"time","durationSec":60,"source":{"type":"wordlist","id":"en-1k","words":80},"goal":{"wpm":60,"acc":95}},{"id":"marathon","name":"Marathon","blurb":"5 minutes. Hold 50 wpm at 96% the whole way.","mode":"time","durationSec":300,"source":{"type":"wordlist","id":"en-1k","words":400},"goal":{"wpm":50,"acc":96}},{"id":"word-100","name":"100 Words","blurb":"Type 100 common words. Aim for 70 wpm.","mode":"words","words":100,"source":{"type":"wordlist","id":"en-1k","words":100},"goal":{"wpm":70,"acc":95}},{"id":"word-500","name":"500 Words","blurb":"Endurance. 500 words. 60 wpm to clear it.","mode":"words","words":500,"source":{"type":"wordlist","id":"en-5k","words":500},"goal":{"wpm":60,"acc":95}},{"id":"quote-chase","name":"Quote Chase","blurb":"A literary quote. Don't just type — read.","mode":"quote","source":{"type":"quote","length":"medium"},"goal":{"wpm":55,"acc":96}},{"id":"mountain-climb","name":"Mountain Climb","blurb":"Words get harder as you climb. Don't slip.","mode":"words","words":80,"source":{"type":"mountain"},"goal":{"wpm":55,"acc":94}},{"id":"pangram","name":"Pangram Run","blurb":"Every letter, every time. Hit them all.","mode":"quote","source":{"type":"pangrams"},"goal":{"wpm":50,"acc":97}},{"id":"numbers","name":"Numbers Gauntlet","blurb":"Numbers only. Surprisingly painful.","mode":"words","words":50,"source":{"type":"numbers"},"numbers":true,"goal":{"wpm":40,"acc":96}},{"id":"punctuation","name":"Punctuation Gauntlet","blurb":"Apostrophes, hyphens, periods. The works.","mode":"words","words":30,"source":{"type":"punctuation"},"punctuation":true,"goal":{"wpm":50,"acc":95}},{"id":"code-mode","name":"Code Mode","blurb":"Function, const, return. Symbols included.","mode":"words","words":40,"source":{"type":"code"},"goal":{"wpm":45,"acc":95}},{"id":"zen","name":"Zen","blurb":"No timer. No goal. Just type until you stop.","mode":"zen","source":{"type":"wordlist","id":"en-1k","words":50}},{"id":"lightning-15","name":"Lightning","blurb":"15 seconds. Show your top gear -- 80 wpm to clear it.","mode":"time","durationSec":15,"source":{"type":"wordlist","id":"en-1k","words":30},"goal":{"wpm":80,"acc":94}},{"id":"blitz-30","name":"Blitz","blurb":"30 seconds. 70 wpm at 95% to clear.","mode":"time","durationSec":30,"source":{"type":"wordlist","id":"en-1k","words":50},"goal":{"wpm":70,"acc":95}},{"id":"two-min","name":"Two Minutes","blurb":"120 seconds. Hold 65 wpm.","mode":"time","durationSec":120,"source":{"type":"wordlist","id":"en-1k","words":200},"goal":{"wpm":65,"acc":95}},{"id":"ten-min","name":"Ten Minutes","blurb":"600 seconds of sustained focus. 45 wpm at 96%.","mode":"time","durationSec":600,"source":{"type":"wordlist","id":"en-1k","words":800},"goal":{"wpm":45,"acc":96}},{"id":"word-50","name":"50 Words","blurb":"Quick run. 50 words at 65 wpm.","mode":"words","words":50,"source":{"type":"wordlist","id":"en-1k","words":50},"goal":{"wpm":65,"acc":95}},{"id":"word-200","name":"200 Words","blurb":"Mid-distance. 200 words, 60 wpm.","mode":"words","words":200,"source":{"type":"wordlist","id":"en-1k","words":200},"goal":{"wpm":60,"acc":95}},{"id":"word-1000","name":"1000 Words","blurb":"Pure endurance. A thousand words at 50 wpm.","mode":"words","words":1000,"source":{"type":"wordlist","id":"en-5k","words":1000},"goal":{"wpm":50,"acc":95}},{"id":"perfect-100","name":"Perfect 100","blurb":"100 words at 100% accuracy. One miss disqualifies.","mode":"words","words":100,"source":{"type":"wordlist","id":"en-1k","words":100},"goal":{"wpm":40,"acc":100}},{"id":"precision-50","name":"Precision Run","blurb":"50 words, 99% accuracy minimum.","mode":"words","words":50,"source":{"type":"wordlist","id":"en-1k","words":50},"goal":{"wpm":50,"acc":99}},{"id":"stop-on-error","name":"Stop on Error","blurb":"Cursor halts on every wrong key. 60 words at 96%.","mode":"words","words":60,"source":{"type":"wordlist","id":"en-1k","words":60},"stopOnError":true,"goal":{"wpm":45,"acc":96}},{"id":"speed-tier-bronze","name":"Bronze Tier","blurb":"60 seconds. 40 wpm at 92%. The first rung.","mode":"time","durationSec":60,"source":{"type":"wordlist","id":"en-1k","words":80},"goal":{"wpm":40,"acc":92}},{"id":"speed-tier-silver","name":"Silver Tier","blurb":"60 seconds. 70 wpm at 95%.","mode":"time","durationSec":60,"source":{"type":"wordlist","id":"en-1k","words":80},"goal":{"wpm":70,"acc":95}},{"id":"speed-tier-gold","name":"Gold Tier","blurb":"60 seconds. 90 wpm at 96%.","mode":"time","durationSec":60,"source":{"type":"wordlist","id":"en-1k","words":80},"goal":{"wpm":90,"acc":96}},{"id":"speed-tier-platinum","name":"Platinum Tier","blurb":"60 seconds. 110 wpm at 97%.","mode":"time","durationSec":60,"source":{"type":"wordlist","id":"en-1k","words":80},"goal":{"wpm":110,"acc":97}},{"id":"speed-tier-diamond","name":"Diamond Tier","blurb":"60 seconds. 130 wpm at 98%. Legendary.","mode":"time","durationSec":60,"source":{"type":"wordlist","id":"en-1k","words":80},"goal":{"wpm":130,"acc":98}},{"id":"long-quote","name":"Long Quote","blurb":"A long literary passage. Type carefully.","mode":"quote","source":{"type":"quote","length":"long"},"goal":{"wpm":50,"acc":97}},{"id":"poetry-run","name":"Poetry Run","blurb":"A public-domain poem. Mind the line breaks.","mode":"quote","source":{"type":"poetry"},"goal":{"wpm":45,"acc":96}},{"id":"speech-run","name":"Famous Speech","blurb":"A passage from a public-domain speech.","mode":"quote","source":{"type":"speech"},"goal":{"wpm":50,"acc":96}},{"id":"code-marathon","name":"Code Marathon","blurb":"200 tokens of real code. Symbols matter.","mode":"words","words":200,"source":{"type":"code"},"goal":{"wpm":40,"acc":95}},{"id":"symbols-only","name":"Symbols Only","blurb":"Brackets, quotes, operators, punctuation. Pure symbol drill.","mode":"words","words":30,"source":{"type":"punctuation"},"punctuation":true,"goal":{"wpm":35,"acc":95}},{"id":"uppercase-sprint","name":"Uppercase Sprint","blurb":"All-caps acronyms and proper nouns. Shift-key gauntlet.","mode":"words","words":40,"source":{"type":"wordlist","id":"acronyms","words":40},"goal":{"wpm":45,"acc":95}},{"id":"numbers-100","name":"100 Numbers","blurb":"100 numbers. Years, prices, codes, IDs.","mode":"words","words":100,"source":{"type":"numbers"},"numbers":true,"goal":{"wpm":35,"acc":96}},{"id":"alphabet-sprint","name":"Alphabet Sprint","blurb":"Type the alphabet five times in a row, no errors.","mode":"words","words":5,"source":{"type":"literal","text":"abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz"},"goal":{"wpm":60,"acc":100}},{"id":"numbers-alphabet","name":"Numbers + Alphabet","blurb":"Digits 0-9 then A-Z. Shift between rows cleanly.","mode":"words","words":5,"source":{"type":"literal","text":"0123456789 abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"},"goal":{"wpm":50,"acc":100}},{"id":"no-backspace","name":"No Backspace","blurb":"100 words, but you can't fix mistakes. 95% to clear.","mode":"words","words":100,"source":{"type":"wordlist","id":"en-1k","words":100},"forgiveErrors":false,"goal":{"wpm":50,"acc":95}},{"id":"comeback","name":"The Comeback","blurb":"Type for 3 minutes -- but only the second half counts.","mode":"time","durationSec":180,"source":{"type":"wordlist","id":"en-1k","words":240},"goal":{"wpm":60,"acc":96}},{"id":"hour-of-power","name":"Hour of Power","blurb":"60 minutes of typing. Hold 40 wpm at 96%.","mode":"time","durationSec":3600,"source":{"type":"wordlist","id":"en-1k","words":4000},"goal":{"wpm":40,"acc":96}}]
