{"schema_version":1,"workouts":[{"id":"recovery-spin-30","name":"Recovery Spin 30","category":"recovery","description":"Thirty minutes of very easy spinning to loosen the legs.","steps":[{"duration_s":300,"start_pct":40,"end_pct":50,"kind":"warmup"},{"duration_s":1200,"start_pct":50,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-spin-45","name":"Recovery Spin 45","category":"recovery","description":"Forty-five minutes at an easy, conversational effort.","steps":[{"duration_s":300,"start_pct":40,"end_pct":50,"kind":"warmup"},{"duration_s":2100,"start_pct":50,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-spin-60","name":"Recovery Spin 60","category":"recovery","description":"An hour of gentle riding to aid recovery after hard days.","steps":[{"duration_s":300,"start_pct":40,"end_pct":50,"kind":"warmup"},{"duration_s":3000,"start_pct":50,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-step-down-35","name":"Step-Down Recovery","category":"recovery","description":"Starts at an easy endurance pace and steps down to a gentle spin.","steps":[{"duration_s":300,"start_pct":40,"end_pct":50,"kind":"warmup"},{"duration_s":600,"start_pct":55,"kind":"work"},{"duration_s":600,"start_pct":50,"kind":"work"},{"duration_s":300,"start_pct":45,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-lifts-40","name":"Recovery with Lifts","category":"recovery","description":"Easy spinning with three gentle 2-minute lifts to keep the legs fresh.","steps":[{"duration_s":300,"start_pct":40,"end_pct":50,"kind":"warmup"},{"duration_s":480,"start_pct":48,"kind":"work"},{"duration_s":120,"start_pct":62,"kind":"work"},{"duration_s":480,"start_pct":48,"kind":"work"},{"duration_s":120,"start_pct":62,"kind":"work"},{"duration_s":480,"start_pct":48,"kind":"work"},{"duration_s":120,"start_pct":62,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-ladder-40","name":"Recovery Ladder","category":"recovery","description":"Five 6-minute steps that climb gently to 55 % and back down.","steps":[{"duration_s":300,"start_pct":40,"end_pct":50,"kind":"warmup"},{"duration_s":360,"start_pct":45,"kind":"work"},{"duration_s":360,"start_pct":50,"kind":"work"},{"duration_s":360,"start_pct":55,"kind":"work"},{"duration_s":360,"start_pct":50,"kind":"work"},{"duration_s":360,"start_pct":45,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-waves-50","name":"Recovery Waves","category":"recovery","description":"Four easy waves alternating 5 minutes very light and 5 minutes light.","steps":[{"duration_s":300,"start_pct":40,"end_pct":50,"kind":"warmup"},{"duration_s":300,"start_pct":45,"kind":"work"},{"duration_s":300,"start_pct":58,"kind":"work"},{"duration_s":300,"start_pct":45,"kind":"work"},{"duration_s":300,"start_pct":58,"kind":"work"},{"duration_s":300,"start_pct":45,"kind":"work"},{"duration_s":300,"start_pct":58,"kind":"work"},{"duration_s":300,"start_pct":45,"kind":"work"},{"duration_s":300,"start_pct":58,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-pick-ups-30","name":"Spin with Pick-Ups","category":"recovery","description":"A short easy ride with four 1-minute pick-ups to 65 %.","steps":[{"duration_s":300,"start_pct":40,"end_pct":50,"kind":"warmup"},{"duration_s":240,"start_pct":50,"kind":"work"},{"duration_s":60,"start_pct":65,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"work"},{"duration_s":60,"start_pct":65,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"work"},{"duration_s":60,"start_pct":65,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"work"},{"duration_s":60,"start_pct":65,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-openers-45","name":"Easy Spin with Openers","category":"recovery","description":"An easy ride finished with three short 30-second openers, ideal the day before an event.","steps":[{"duration_s":600,"start_pct":40,"end_pct":55,"kind":"warmup"},{"duration_s":1200,"start_pct":52,"kind":"work"},{"duration_s":30,"start_pct":100,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":100,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":100,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":360,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"recovery-day-after-55","name":"Day-After Spin","category":"recovery","description":"A long, steady recovery ride just below endurance pace.","steps":[{"duration_s":480,"start_pct":40,"end_pct":55,"kind":"warmup"},{"duration_s":2400,"start_pct":53,"kind":"work"},{"duration_s":420,"start_pct":50,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-45","name":"Endurance 45","category":"endurance","description":"A compact aerobic ride with 30 minutes at a steady endurance pace.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":1800,"start_pct":68,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-60","name":"Endurance 60","category":"endurance","description":"One hour of steady Zone 2 riding to build aerobic base.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":2700,"start_pct":68,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-75","name":"Endurance 75","category":"endurance","description":"An hour of uninterrupted endurance riding plus warm-up and cool-down.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":3600,"start_pct":68,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-90","name":"Endurance 90","category":"endurance","description":"Seventy-five minutes at the top of Zone 2 for aerobic durability.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":4500,"start_pct":70,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-105","name":"Endurance 105","category":"endurance","description":"Ninety minutes of steady endurance riding.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":5400,"start_pct":68,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-120","name":"Long Endurance 2h","category":"endurance","description":"Two hours of steady aerobic work for the long-ride specialist.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":6000,"start_pct":68,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-pyramid-60","name":"Endurance Pyramid","category":"endurance","description":"Endurance pace built in 10-minute steps from 62 % to 74 % and back.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":600,"start_pct":62,"kind":"work"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":600,"start_pct":74,"kind":"work"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":300,"start_pct":62,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-tempo-bursts-75","name":"Endurance with Tempo Bursts","category":"endurance","description":"Five blocks of 9 minutes endurance followed by 3 minutes at tempo.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":540,"start_pct":68,"kind":"work"},{"duration_s":180,"start_pct":82,"kind":"work"},{"duration_s":540,"start_pct":68,"kind":"work"},{"duration_s":180,"start_pct":82,"kind":"work"},{"duration_s":540,"start_pct":68,"kind":"work"},{"duration_s":180,"start_pct":82,"kind":"work"},{"duration_s":540,"start_pct":68,"kind":"work"},{"duration_s":180,"start_pct":82,"kind":"work"},{"duration_s":540,"start_pct":68,"kind":"work"},{"duration_s":180,"start_pct":82,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-progression-90","name":"Endurance Progression","category":"endurance","description":"Three 25-minute blocks, each a little harder, from 65 % to 74 %.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":1500,"start_pct":65,"kind":"work"},{"duration_s":1500,"start_pct":70,"kind":"work"},{"duration_s":1500,"start_pct":74,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-surges-90","name":"Endurance Surges","category":"endurance","description":"Steady endurance riding with a 1-minute surge every 11 minutes.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":60,"start_pct":110,"kind":"work"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":60,"start_pct":110,"kind":"work"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":60,"start_pct":110,"kind":"work"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":60,"start_pct":110,"kind":"work"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":60,"start_pct":110,"kind":"work"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":60,"start_pct":110,"kind":"work"},{"duration_s":540,"start_pct":68,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"endurance-sweet-spot-finish-120","name":"Endurance with a Sweet Spot Finish","category":"endurance","description":"A long endurance ride that finishes with 15 minutes at sweet spot.","steps":[{"duration_s":600,"start_pct":40,"end_pct":65,"kind":"warmup"},{"duration_s":5100,"start_pct":68,"kind":"work"},{"duration_s":900,"start_pct":88,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"long-ride-efforts","name":"Long Ride with Efforts","category":"endurance","description":"Two hours of endurance with sweet spot and VO2 max efforts mixed in.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":1800,"start_pct":68,"kind":"work"},{"duration_s":600,"start_pct":90,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":90,"kind":"work"},{"duration_s":1200,"start_pct":68,"kind":"work"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":780,"start_pct":65,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-3x8","name":"Tempo 3×8","category":"tempo","description":"Three 8-minute tempo efforts with 3-minute recoveries.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":480,"start_pct":82,"kind":"work"},{"duration_s":180,"start_pct":60,"kind":"recovery"},{"duration_s":480,"start_pct":82,"kind":"work"},{"duration_s":180,"start_pct":60,"kind":"recovery"},{"duration_s":480,"start_pct":82,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-2x15","name":"Tempo 2×15","category":"tempo","description":"Two 15-minute tempo blocks with a 5-minute recovery.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":900,"start_pct":80,"kind":"work"},{"duration_s":300,"start_pct":60,"kind":"recovery"},{"duration_s":900,"start_pct":80,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-progressive-50","name":"Progressive Tempo","category":"tempo","description":"A single 30-minute effort that rises smoothly from 75 % to 88 %.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":1800,"start_pct":75,"end_pct":88,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-2x20","name":"Tempo 2×20","category":"tempo","description":"Two 20-minute tempo blocks with a 5-minute recovery.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":1200,"start_pct":80,"kind":"work"},{"duration_s":300,"start_pct":60,"kind":"recovery"},{"duration_s":1200,"start_pct":80,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-steady-40","name":"Steady Tempo 40","category":"tempo","description":"Forty unbroken minutes at a firm tempo pace.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":2400,"start_pct":78,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-ladder-60","name":"Tempo Ladder","category":"tempo","description":"Four 10-minute steps climbing through Zone 3 from 76 % to 84 %.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":600,"start_pct":76,"kind":"work"},{"duration_s":600,"start_pct":80,"kind":"work"},{"duration_s":600,"start_pct":84,"kind":"work"},{"duration_s":600,"start_pct":80,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-3x15","name":"Tempo 3×15","category":"tempo","description":"Three 15-minute tempo efforts with 5-minute recoveries.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":900,"start_pct":82,"kind":"work"},{"duration_s":300,"start_pct":60,"kind":"recovery"},{"duration_s":900,"start_pct":82,"kind":"work"},{"duration_s":300,"start_pct":60,"kind":"recovery"},{"duration_s":900,"start_pct":82,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-surges-75","name":"Tempo with Surges","category":"tempo","description":"Two 25-minute tempo blocks with a 1-minute surge every 5 minutes.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":300,"start_pct":60,"kind":"recovery"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":100,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-steady-60","name":"Steady Tempo 60","category":"tempo","description":"A full hour at tempo for muscular endurance.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":3600,"start_pct":77,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-3x20","name":"Tempo 3×20","category":"tempo","description":"Three 20-minute tempo blocks with 5-minute recoveries.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":1200,"start_pct":80,"kind":"work"},{"duration_s":300,"start_pct":60,"kind":"recovery"},{"duration_s":1200,"start_pct":80,"kind":"work"},{"duration_s":300,"start_pct":60,"kind":"recovery"},{"duration_s":1200,"start_pct":80,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-2x30","name":"Long Tempo 2×30","category":"tempo","description":"Two 30-minute tempo blocks, then 15 minutes of endurance.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":1800,"start_pct":78,"kind":"work"},{"duration_s":600,"start_pct":62,"kind":"recovery"},{"duration_s":1800,"start_pct":78,"kind":"work"},{"duration_s":900,"start_pct":68,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"rolling-hills","name":"Rolling Hills","category":"tempo","description":"Six rolling 10-minute sections of climbing, cresting and easy descending.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":240,"start_pct":85,"kind":"work"},{"duration_s":120,"start_pct":105,"kind":"work"},{"duration_s":240,"start_pct":68,"kind":"work"},{"duration_s":240,"start_pct":85,"kind":"work"},{"duration_s":120,"start_pct":105,"kind":"work"},{"duration_s":240,"start_pct":68,"kind":"work"},{"duration_s":240,"start_pct":85,"kind":"work"},{"duration_s":120,"start_pct":105,"kind":"work"},{"duration_s":240,"start_pct":68,"kind":"work"},{"duration_s":240,"start_pct":85,"kind":"work"},{"duration_s":120,"start_pct":105,"kind":"work"},{"duration_s":240,"start_pct":68,"kind":"work"},{"duration_s":240,"start_pct":85,"kind":"work"},{"duration_s":120,"start_pct":105,"kind":"work"},{"duration_s":240,"start_pct":68,"kind":"work"},{"duration_s":240,"start_pct":85,"kind":"work"},{"duration_s":120,"start_pct":105,"kind":"work"},{"duration_s":240,"start_pct":68,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-express-40","name":"Sweet Spot Express","category":"sweet_spot","description":"Three 8-minute sweet spot efforts in a short session.","steps":[{"duration_s":420,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":480,"start_pct":90,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":90,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":90,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-2x15","name":"Sweet Spot 2×15","category":"sweet_spot","description":"Two 15-minute sweet spot efforts with a 5-minute recovery.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":900,"start_pct":90,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":900,"start_pct":90,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-3x10","name":"Sweet Spot 3×10","category":"sweet_spot","description":"Three 10-minute sweet spot efforts with 5-minute recoveries.","steps":[{"duration_s":600,"start_pct":50,"end_pct":75,"kind":"warmup"},{"duration_s":600,"start_pct":90,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":90,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":90,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-2x20","name":"Sweet Spot 2×20","category":"sweet_spot","description":"Two 20-minute sweet spot efforts with a 5-minute recovery.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":1200,"start_pct":90,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":1200,"start_pct":90,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-steady-45","name":"Sweet Spot 45","category":"sweet_spot","description":"Forty-five unbroken minutes at the bottom of sweet spot.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":2700,"start_pct":88,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-bursts-65","name":"Sweet Spot with Bursts","category":"sweet_spot","description":"Three 12-minute sweet spot blocks with a 30-second burst every 3 minutes.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":150,"start_pct":88,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":540,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-4x10","name":"Sweet Spot 4×10","category":"sweet_spot","description":"Four 10-minute sweet spot efforts with 5-minute recoveries.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":600,"start_pct":91,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":91,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":91,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":91,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-5x8","name":"Sweet Spot 5×8","category":"sweet_spot","description":"Five 8-minute efforts at the top of sweet spot with short recoveries.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":480,"start_pct":92,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":92,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":92,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":92,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":92,"kind":"work"},{"duration_s":480,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-3x15","name":"Sweet Spot 3×15","category":"sweet_spot","description":"Three 15-minute sweet spot efforts with 5-minute recoveries.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":900,"start_pct":89,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":900,"start_pct":89,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":900,"start_pct":89,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-pyramid-75","name":"Sweet Spot Pyramid","category":"sweet_spot","description":"Sweet spot efforts of 5, 10, 15, 10 and 5 minutes with short recoveries.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":300,"start_pct":88,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":90,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":900,"start_pct":92,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":90,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":300,"start_pct":88,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-2x30","name":"Sweet Spot 2×30","category":"sweet_spot","description":"Two 30-minute sweet spot efforts with a 10-minute recovery.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":1800,"start_pct":88,"kind":"work"},{"duration_s":600,"start_pct":55,"kind":"recovery"},{"duration_s":1800,"start_pct":88,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-3x20","name":"Sweet Spot 3×20","category":"sweet_spot","description":"Three 20-minute sweet spot efforts with 5-minute recoveries.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":1200,"start_pct":88,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":1200,"start_pct":88,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":1200,"start_pct":88,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"all-zones-60","name":"All Zones 60","category":"sweet_spot","description":"Steps through endurance, tempo and sweet spot, then four VO2 max efforts.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":480,"start_pct":68,"kind":"work"},{"duration_s":480,"start_pct":80,"kind":"work"},{"duration_s":480,"start_pct":90,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"zone-pyramid","name":"Zone Pyramid","category":"sweet_spot","description":"Climbs from endurance to VO2 max in shrinking steps, then back down.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":600,"start_pct":65,"kind":"work"},{"duration_s":480,"start_pct":78,"kind":"work"},{"duration_s":360,"start_pct":90,"kind":"work"},{"duration_s":240,"start_pct":102,"kind":"work"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":240,"start_pct":102,"kind":"work"},{"duration_s":360,"start_pct":90,"kind":"work"},{"duration_s":480,"start_pct":78,"kind":"work"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-90-mix","name":"Sweet Spot 90 Mix","category":"sweet_spot","description":"Endurance, two 15-minute sweet spot efforts and five VO2 max efforts.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":900,"start_pct":68,"kind":"work"},{"duration_s":900,"start_pct":88,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":900,"start_pct":88,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":115,"kind":"work"},{"duration_s":120,"start_pct":55,"kind":"recovery"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-1x30","name":"Threshold 30","category":"threshold","description":"One sustained 30-minute effort just below FTP.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":1800,"start_pct":95,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-over-unders-3x9","name":"Over-Unders 3×9","category":"threshold","description":"Three 9-minute blocks alternating 2 minutes under and 1 minute over FTP.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":120,"start_pct":95,"kind":"work"},{"duration_s":60,"start_pct":106,"kind":"work"},{"duration_s":480,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-2x15","name":"Threshold 2×15","category":"threshold","description":"Two 15-minute efforts at FTP with a 5-minute recovery.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":900,"start_pct":100,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":900,"start_pct":100,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-3x10","name":"Threshold 3×10","category":"threshold","description":"Three 10-minute efforts at FTP with 5-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":600,"start_pct":100,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":100,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":100,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-4x8","name":"Threshold 4×8","category":"threshold","description":"Four 8-minute efforts slightly above FTP with 4-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":480,"start_pct":102,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":102,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":102,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":102,"kind":"work"},{"duration_s":360,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-5x6","name":"Threshold 5×6","category":"threshold","description":"Five 6-minute efforts above FTP with 3-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":360,"start_pct":104,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":360,"start_pct":104,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":360,"start_pct":104,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":360,"start_pct":104,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":360,"start_pct":104,"kind":"work"},{"duration_s":480,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-over-unders-4x8","name":"Over-Unders 4×8","category":"threshold","description":"Four 8-minute blocks of 90 seconds under and 30 seconds over FTP.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":90,"start_pct":92,"kind":"work"},{"duration_s":30,"start_pct":110,"kind":"work"},{"duration_s":360,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-ladder-60","name":"Threshold Ladder","category":"threshold","description":"Threshold efforts of 6, 8, 10 and 8 minutes with growing recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":360,"start_pct":95,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":98,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":100,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":98,"kind":"work"},{"duration_s":360,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-progression-60","name":"Threshold Progression","category":"threshold","description":"Three 10-minute efforts that each rise from 92 % to 104 %.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":600,"start_pct":92,"end_pct":104,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":92,"end_pct":104,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":92,"end_pct":104,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-3x12","name":"Threshold 3×12","category":"threshold","description":"Three 12-minute efforts just under FTP with 6-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":720,"start_pct":98,"kind":"work"},{"duration_s":360,"start_pct":55,"kind":"recovery"},{"duration_s":720,"start_pct":98,"kind":"work"},{"duration_s":360,"start_pct":55,"kind":"recovery"},{"duration_s":720,"start_pct":98,"kind":"work"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-2x20","name":"Threshold 2×20","category":"threshold","description":"The classic: two 20-minute efforts just below FTP.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":1200,"start_pct":97,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":1200,"start_pct":97,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-2x30","name":"Threshold 2×30","category":"threshold","description":"Two long 30-minute efforts at the bottom of the threshold zone.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":1800,"start_pct":95,"kind":"work"},{"duration_s":600,"start_pct":55,"kind":"recovery"},{"duration_s":1800,"start_pct":95,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"threshold-attacks","name":"Threshold and Attacks","category":"threshold","description":"Two 10-minute threshold efforts, then six 30-second attacks.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":600,"start_pct":100,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":100,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":150,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":150,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":150,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":150,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":150,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":150,"start_pct":55,"kind":"recovery"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-5x3","name":"VO2 Max 5×3","category":"vo2_max","description":"Five 3-minute efforts at 115 % with equal recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":480,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-40-20","name":"VO2 Max 40/20s","category":"vo2_max","description":"Three sets of six 40-second efforts with 20-second recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":40,"start_pct":118,"kind":"work"},{"duration_s":20,"start_pct":50,"kind":"recovery"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-rising-4x4","name":"Rising VO2 4×4","category":"vo2_max","description":"Four 4-minute efforts that each climb from 105 % to 120 %.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":240,"start_pct":105,"end_pct":120,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":105,"end_pct":120,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":105,"end_pct":120,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":105,"end_pct":120,"kind":"work"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-6x3","name":"VO2 Max 6×3","category":"vo2_max","description":"Six 3-minute efforts at 115 % with 3-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-30-30","name":"VO2 Max 30/30s","category":"vo2_max","description":"Three sets of eight 30-second efforts with 30-second recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":120,"kind":"work"},{"duration_s":30,"start_pct":50,"kind":"recovery"},{"duration_s":360,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-pyramid","name":"VO2 Max Pyramid","category":"vo2_max","description":"Efforts of 1, 2, 3, 4, 3, 2 and 1 minutes with equal recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":60,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":118,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":118,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":540,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-2-sets-4x2","name":"VO2 Max 2×(4×2)","category":"vo2_max","description":"Two sets of four 2-minute efforts at 120 % with equal recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":120,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":120,"kind":"work"},{"duration_s":360,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":120,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":120,"kind":"work"},{"duration_s":360,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-5x4","name":"VO2 Max 5×4","category":"vo2_max","description":"Five 4-minute efforts at 112 % with 4-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":540,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-4x5","name":"VO2 Max 4×5","category":"vo2_max","description":"Four 5-minute efforts at 110 % with 5-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":300,"start_pct":110,"kind":"work"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":110,"kind":"work"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":110,"kind":"work"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":110,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-3x8","name":"Long VO2 3×8","category":"vo2_max","description":"Three long 8-minute efforts at the bottom of the VO2 max zone.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":480,"start_pct":106,"kind":"work"},{"duration_s":360,"start_pct":50,"kind":"recovery"},{"duration_s":480,"start_pct":106,"kind":"work"},{"duration_s":360,"start_pct":50,"kind":"recovery"},{"duration_s":480,"start_pct":106,"kind":"work"},{"duration_s":540,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"vo2-max-builder-75","name":"VO2 Max Builder","category":"vo2_max","description":"Endurance riding around five 4-minute VO2 max efforts.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":900,"start_pct":72,"kind":"work"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":240,"start_pct":112,"kind":"work"},{"duration_s":540,"start_pct":70,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sweet-spot-vo2","name":"Sweet Spot and VO2","category":"vo2_max","description":"Two 12-minute sweet spot efforts followed by four 3-minute VO2 max efforts.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":720,"start_pct":90,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":720,"start_pct":90,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"triple-block","name":"Triple Block","category":"vo2_max","description":"Tempo, threshold and VO2 max blocks in one long session.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":1200,"start_pct":80,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":100,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":100,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":115,"kind":"work"},{"duration_s":540,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-express","name":"Anaerobic Express","category":"anaerobic","description":"Six 1-minute efforts at 130 % with 2-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":60,"start_pct":130,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":130,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":130,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":130,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":130,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":130,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":420,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-8x1","name":"Anaerobic 8×1","category":"anaerobic","description":"Eight 1-minute efforts at 135 % with 3-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":360,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-10x45s","name":"Anaerobic 10×45s","category":"anaerobic","description":"Ten 45-second efforts at 140 % with recoveries just over 2 minutes.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":45,"start_pct":140,"kind":"work"},{"duration_s":135,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-6x90s","name":"Anaerobic 6×90s","category":"anaerobic","description":"Six 90-second efforts at 130 % with 3½-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":90,"start_pct":130,"kind":"work"},{"duration_s":210,"start_pct":50,"kind":"recovery"},{"duration_s":90,"start_pct":130,"kind":"work"},{"duration_s":210,"start_pct":50,"kind":"recovery"},{"duration_s":90,"start_pct":130,"kind":"work"},{"duration_s":210,"start_pct":50,"kind":"recovery"},{"duration_s":90,"start_pct":130,"kind":"work"},{"duration_s":210,"start_pct":50,"kind":"recovery"},{"duration_s":90,"start_pct":130,"kind":"work"},{"duration_s":210,"start_pct":50,"kind":"recovery"},{"duration_s":90,"start_pct":130,"kind":"work"},{"duration_s":210,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-20-40","name":"Anaerobic 20/40s","category":"anaerobic","description":"Three sets of eight 20-second efforts at 150 % with 40-second recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":150,"kind":"work"},{"duration_s":40,"start_pct":50,"kind":"recovery"},{"duration_s":360,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-ladder","name":"Anaerobic Ladder","category":"anaerobic","description":"Efforts of 30, 60, 90, 120, 90, 60 and 30 seconds with recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":140,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":90,"start_pct":130,"kind":"work"},{"duration_s":210,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":125,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":90,"start_pct":130,"kind":"work"},{"duration_s":210,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":140,"kind":"work"},{"duration_s":180,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-6x2","name":"Anaerobic 6×2","category":"anaerobic","description":"Six 2-minute efforts at 125 % with 4-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":120,"start_pct":125,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":125,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":125,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":125,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":125,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":120,"start_pct":125,"kind":"work"},{"duration_s":240,"start_pct":50,"kind":"recovery"},{"duration_s":540,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-12x30s","name":"Anaerobic 12×30s","category":"anaerobic","description":"Twelve 30-second efforts at 160 % with 2½-minute recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":30,"start_pct":160,"kind":"work"},{"duration_s":150,"start_pct":50,"kind":"recovery"},{"duration_s":540,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-attack-and-hold","name":"Attack and Hold","category":"anaerobic","description":"Four 30-second attacks, each followed by 4½ minutes held at threshold.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":270,"start_pct":95,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":270,"start_pct":95,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":270,"start_pct":95,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":150,"kind":"work"},{"duration_s":270,"start_pct":95,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"anaerobic-capacity-2x5x1","name":"Anaerobic Capacity 2×(5×1)","category":"anaerobic","description":"Two sets of five 1-minute efforts at 135 %, then 10 minutes of endurance.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":60,"start_pct":135,"kind":"work"},{"duration_s":120,"start_pct":50,"kind":"recovery"},{"duration_s":600,"start_pct":70,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"crit-prep","name":"Criterium Prep","category":"anaerobic","description":"Three sets of repeated 30-second accelerations, then 10 minutes at sweet spot.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":240,"start_pct":55,"kind":"recovery"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":30,"start_pct":140,"kind":"work"},{"duration_s":30,"start_pct":70,"kind":"work"},{"duration_s":600,"start_pct":92,"kind":"work"},{"duration_s":540,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"race-simulation","name":"Race Simulation","category":"anaerobic","description":"Surges, a sustained climb, repeated attacks and a final effort to the line.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":600,"start_pct":75,"kind":"work"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":60,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":60,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":60,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":120,"kind":"work"},{"duration_s":60,"start_pct":80,"kind":"work"},{"duration_s":600,"start_pct":95,"kind":"work"},{"duration_s":20,"start_pct":160,"kind":"work"},{"duration_s":40,"start_pct":75,"kind":"work"},{"duration_s":20,"start_pct":160,"kind":"work"},{"duration_s":40,"start_pct":75,"kind":"work"},{"duration_s":20,"start_pct":160,"kind":"work"},{"duration_s":40,"start_pct":75,"kind":"work"},{"duration_s":20,"start_pct":160,"kind":"work"},{"duration_s":40,"start_pct":75,"kind":"work"},{"duration_s":20,"start_pct":160,"kind":"work"},{"duration_s":40,"start_pct":75,"kind":"work"},{"duration_s":20,"start_pct":160,"kind":"work"},{"duration_s":40,"start_pct":75,"kind":"work"},{"duration_s":300,"start_pct":85,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":180,"start_pct":105,"kind":"work"},{"duration_s":480,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-primer-30","name":"Sprint Primer","category":"sprint","description":"Five 10-second sprints with short recoveries in a quick session.","steps":[{"duration_s":600,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":10,"start_pct":180,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":180,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":180,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":180,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":180,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":300,"start_pct":65,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-6x15s","name":"Sprints 6×15s","category":"sprint","description":"Six 15-second sprints at 180 % with full recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":285,"start_pct":55,"kind":"recovery"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":285,"start_pct":55,"kind":"recovery"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":285,"start_pct":55,"kind":"recovery"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":285,"start_pct":55,"kind":"recovery"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":285,"start_pct":55,"kind":"recovery"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":285,"start_pct":55,"kind":"recovery"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-max-6x20s","name":"Max Sprints 6×20s","category":"sprint","description":"Six 20-second maximal sprints at 220 % with long recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":20,"start_pct":220,"kind":"work"},{"duration_s":280,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":220,"kind":"work"},{"duration_s":280,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":220,"kind":"work"},{"duration_s":280,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":220,"kind":"work"},{"duration_s":280,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":220,"kind":"work"},{"duration_s":280,"start_pct":50,"kind":"recovery"},{"duration_s":20,"start_pct":220,"kind":"work"},{"duration_s":280,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-ladder","name":"Sprint Ladder","category":"sprint","description":"Sprints of 10, 15, 20, 15 and 10 seconds, each in a 5-minute block.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":15,"start_pct":190,"kind":"work"},{"duration_s":285,"start_pct":55,"kind":"recovery"},{"duration_s":20,"start_pct":180,"kind":"work"},{"duration_s":280,"start_pct":55,"kind":"recovery"},{"duration_s":15,"start_pct":190,"kind":"work"},{"duration_s":285,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-tempo-kicks","name":"Tempo with Sprint Kicks","category":"sprint","description":"Three tempo blocks, each finished with a 15-second sprint.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":585,"start_pct":80,"kind":"work"},{"duration_s":15,"start_pct":170,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":585,"start_pct":80,"kind":"work"},{"duration_s":15,"start_pct":170,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":585,"start_pct":80,"kind":"work"},{"duration_s":15,"start_pct":170,"kind":"work"},{"duration_s":180,"start_pct":55,"kind":"recovery"},{"duration_s":360,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-8x10s","name":"Sprints 8×10s","category":"sprint","description":"Eight 10-second sprints at 200 % with 5-minute blocks.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":290,"start_pct":55,"kind":"recovery"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-repeats","name":"Sprint Repeats","category":"sprint","description":"Two sets of five 10-second sprints, then 15 minutes of endurance.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":900,"start_pct":65,"kind":"work"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-lead-outs","name":"Lead-Outs","category":"sprint","description":"Eight lead-outs: 1 minute at threshold straight into a 15-second sprint.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":60,"start_pct":105,"kind":"work"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":225,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":105,"kind":"work"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":225,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":105,"kind":"work"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":225,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":105,"kind":"work"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":225,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":105,"kind":"work"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":225,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":105,"kind":"work"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":225,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":105,"kind":"work"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":225,"start_pct":55,"kind":"recovery"},{"duration_s":60,"start_pct":105,"kind":"work"},{"duration_s":15,"start_pct":180,"kind":"work"},{"duration_s":225,"start_pct":55,"kind":"recovery"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-endurance-60","name":"Endurance with Sprints","category":"sprint","description":"Endurance riding with a 15-second sprint every 15 minutes.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":15,"start_pct":200,"kind":"work"},{"duration_s":285,"start_pct":60,"kind":"recovery"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":15,"start_pct":200,"kind":"work"},{"duration_s":285,"start_pct":60,"kind":"recovery"},{"duration_s":600,"start_pct":68,"kind":"work"},{"duration_s":15,"start_pct":200,"kind":"work"},{"duration_s":285,"start_pct":60,"kind":"recovery"},{"duration_s":300,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"sprint-micro-bursts","name":"Micro-Bursts","category":"sprint","description":"Three sets of ten 15-second bursts at 150 % with 45-second recoveries.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":300,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":15,"start_pct":150,"kind":"work"},{"duration_s":45,"start_pct":50,"kind":"recovery"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"tempo-and-sprints","name":"Tempo and Sprints","category":"sprint","description":"Twenty minutes at tempo, then six 10-second sprints.","steps":[{"duration_s":480,"start_pct":40,"end_pct":70,"kind":"warmup"},{"duration_s":60,"start_pct":95,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":1200,"start_pct":80,"kind":"work"},{"duration_s":300,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":10,"start_pct":200,"kind":"work"},{"duration_s":110,"start_pct":55,"kind":"recovery"},{"duration_s":480,"start_pct":60,"end_pct":40,"kind":"cooldown"}]},{"id":"ftp-ramp-test","name":"Ramp Test","category":"ftp_test","description":"After a short warm-up the target rises every minute until you can no longer hold it. Your new FTP is 75 % of your best 1-minute power.","steps":[{"duration_s":300,"start_pct":35,"end_pct":45,"kind":"warmup"},{"duration_s":60,"start_pct":50,"kind":"work"},{"duration_s":60,"start_pct":56,"kind":"work"},{"duration_s":60,"start_pct":62,"kind":"work"},{"duration_s":60,"start_pct":68,"kind":"work"},{"duration_s":60,"start_pct":74,"kind":"work"},{"duration_s":60,"start_pct":80,"kind":"work"},{"duration_s":60,"start_pct":86,"kind":"work"},{"duration_s":60,"start_pct":92,"kind":"work"},{"duration_s":60,"start_pct":98,"kind":"work"},{"duration_s":60,"start_pct":104,"kind":"work"},{"duration_s":60,"start_pct":110,"kind":"work"},{"duration_s":60,"start_pct":116,"kind":"work"},{"duration_s":60,"start_pct":122,"kind":"work"},{"duration_s":60,"start_pct":128,"kind":"work"},{"duration_s":60,"start_pct":134,"kind":"work"},{"duration_s":60,"start_pct":140,"kind":"work"},{"duration_s":60,"start_pct":146,"kind":"work"},{"duration_s":60,"start_pct":152,"kind":"work"},{"duration_s":60,"start_pct":158,"kind":"work"},{"duration_s":60,"start_pct":164,"kind":"work"},{"duration_s":60,"start_pct":170,"kind":"work"},{"duration_s":300,"start_pct":50,"end_pct":35,"kind":"cooldown"}]},{"id":"ftp-20-minute-test","name":"20-Minute FTP Test","category":"ftp_test","description":"A 20-minute warm-up with openers, then your best steady 20-minute effort. Your new FTP is 95 % of your average power.","steps":[{"duration_s":600,"start_pct":45,"end_pct":75,"kind":"warmup"},{"duration_s":60,"start_pct":100,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":60,"start_pct":100,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":60,"start_pct":100,"kind":"warmup"},{"duration_s":60,"start_pct":55,"kind":"warmup"},{"duration_s":240,"start_pct":60,"kind":"warmup"},{"duration_s":1200,"start_pct":105,"kind":"work"},{"duration_s":600,"start_pct":60,"end_pct":40,"kind":"cooldown"}]}]}