<turbo-stream action="update" target="modal-container"><template><dialog class="modal modal-wide" id="grammar-reference-modal" aria-labelledby="grammar-reference-modal-title" data-controller="dialog" data-action="click->dialog#backdropClick close->dialog#cleanUp"><header class="modal-head"><h2 class="modal-title" id="grammar-reference-modal-title">Workout Description Reference</h2><form method="dialog"><button class="modal-close" type="submit" aria-label="Close">×</button></form></header><div class="modal-body"><div class="grammar-reference" style="max-height: 70vh; overflow-y: auto; padding-right: 0.5rem;"><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Format Headers</h4><p style="margin-bottom: 0.5rem;">Start your workout with one of these:</p><table class="data-table" style="width: 100%; border-collapse: collapse;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">AMRAP 20</td><td class="data-cell" style="padding: 0.3rem 0;">As many rounds as possible in 20 min</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">EMOM 10</td><td class="data-cell" style="padding: 0.3rem 0;">Every minute on the minute for 10 min</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">E2MOM 16</td><td class="data-cell" style="padding: 0.3rem 0;">Every 2 minutes for 16 min</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">E2MOM 10 (For Load)</td><td class="data-cell" style="padding: 0.3rem 0;">An EMOM scored by load; For Time and For Completion work the same way</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">E90 x5</td><td class="data-cell" style="padding: 0.3rem 0;">Every 90 seconds, 5 rounds</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">For Time</td><td class="data-cell" style="padding: 0.3rem 0;">Complete as fast as possible</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">3 Rounds For Time</td><td class="data-cell" style="padding: 0.3rem 0;">3 rounds, timed</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">For Load</td><td class="data-cell" style="padding: 0.3rem 0;">Find heaviest load</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">For Max Reps</td><td class="data-cell" style="padding: 0.3rem 0;">Maximum repetitions</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">For Max Distance</td><td class="data-cell" style="padding: 0.3rem 0;">Maximum distance</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">For Completion</td><td class="data-cell" style="padding: 0.3rem 0;">Complete the work (untimed)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">Not For Time</td><td class="data-cell" style="padding: 0.3rem 0;">Same as For Completion</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">Tabata</td><td class="data-cell" style="padding: 0.3rem 0;">8 rounds of :20 work / :10 rest</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">Death By</td><td class="data-cell" style="padding: 0.3rem 0;">EMOM adding 1 rep each minute until failure</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">AMRAP:</td><td class="data-cell" style="padding: 0.3rem 0;">Fills whatever time remains on the workout&#39;s Time Cap</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">Within 5:00</td><td class="data-cell" style="padding: 0.3rem 0;">Shorthand for For Time (Time Cap: 5)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">4 RFT</td><td class="data-cell" style="padding: 0.3rem 0;">Same as 4 Rounds For Time</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.3rem 0.75rem 0.3rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">For Reps</td><td class="data-cell" style="padding: 0.3rem 0;">Same as For Max Reps</td></tr></tbody></table><p style="margin-top: 0.5rem;">Use <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">For Time (Time Cap: 15)</code> or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">AMRAP 20 (4:00 on / 2:00 off)</code> for intervals. <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">AMRAP 20 Minutes</code> and <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">AMRAP 20</code> are the same; the word is optional.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Writing Elements</h4><p style="margin-bottom: 0.5rem;">Each element goes on its own line:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>21 Thruster (95/65 lb)
400m Run
0:30 Handstand Hold
10/7 Ring Muscle Up
Deadlift (225/155 lb)
15-12-9-6-3 Pull Up
1000-800-600m Row</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Quantity + Name</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">21 Thruster</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Distance + Name</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">400m Run, 1mi Run</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Duration + Name</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">0:30 Dead Hang, 1:30 Plank</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Gendered reps</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">10/7 Ring Dip (the larger value is men&#39;s, whichever side it is written on)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Name only</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Deadlift (for load workouts)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Inline ladder</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">15-12-9-6-3 HSPU</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Fixed (ladder constant)</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">+ 5 Burpee</td></tr></tbody></table></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Conditions</h4><p style="margin-bottom: 0.5rem;">Add details in parentheses after an element:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>5 Back Squat (80%)
Deadlift (Tempo: 3:1:X:1)
Row (Max Cal)
Ring Dip (Strict)</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Weight</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">135/95 lb, 53/35 kg, 2 pd, 95 (bare number is pounds)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Percentage</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">85%, 65% 1RM Back Squat</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Duration</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">0:30, 45s, 2 minutes</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Tempo</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Tempo: 3:1:X:1 (ecc:bot:con:top)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Strict</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Strict</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Max effort</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Max Reps, Max Cal, Max Distance, Max Load, Max Duration</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Bodyweight</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Bodyweight, 3/4 Bodyweight, 1.5x Bodyweight</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Range</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">65-70%, 8-10 reps, 1-2 min</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Execution</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">unbroken</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Partition</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">athlete choice (a distance or calorie effort the athlete may break up under Work: athlete choice)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Team share</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">together (concurrent, never divided), synchronized (cadence-locked, never divided), each (full quantity per athlete, never divided), split (always divided)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Total</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Total: 10000 lb (cumulative volume target)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Switch at a time</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">95 lb after 5:00, 95 lb at 5:00, 95 lb from 5:00</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Increment</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">+1 (for Death By)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Accumulating</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Accumulating (on For Time header)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Time Cap</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Time Cap: 15 (on header)</td></tr></tbody></table><p>Percentages and tempos are recorded and printed back, but they do not move the estimate: a percentage has no athlete max to resolve against, and tempo is not yet priced.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Strict</code> does move it: strict reps are slower and carry more stress per rep.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Per-Round Increments</h4><p style="margin-bottom: 0.5rem;">Scale element values each round of an AMRAP or EMOM:</p><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><thead><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><th class="data-head" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 600; font-size: 0.8rem; text-align: left;">Form</th><th class="data-head" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 600; font-size: 0.8rem; text-align: left;">Target</th><th class="data-head" style="padding: 0.25rem 0; font-weight: 600; font-size: 0.8rem; text-align: left;">Example</th></tr></thead><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">+N / -N</td><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0;">quantity (reps)</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">5 Pull Up (+5)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">+Ncal / -Ncal</td><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0;">calories</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">5cal Row (+5cal)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">+Nlb / +Nkg</td><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0;">weight</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">5 Back Squat (95, +5lb)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">+Nm / +Nmi / +Nkm / +Nft</td><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0;">distance</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">200m Run (+100m)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-family: monospace; font-size: 0.8rem; white-space: nowrap;">+M:SS</td><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0;">duration</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">0:30 Plank (+0:10)</td></tr></tbody></table><p>Multiple increments per element are allowed: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">5 Back Squat (95, +1, +5lb)</code>.</p><p>Bare integer always targets quantity. Other forms require a unit; duration uses the <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">M:SS</code> colon form.</p><p>Cross-family unit mismatches emit a parser warning but still record the increment.</p><p>For a progression that is not a fixed step, list the loads in the Equipment block: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Barbell: 135/85, 155/105, 185/125, 205/145</code>.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Equipment</h4><p style="margin-bottom: 0.5rem;">Declare a load once for every movement that uses the equipment:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Equipment:
Barbell: 95/65
Kettlebell: 53/35

AMRAP 12
5 Power Clean
10 Kettlebell Swing</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Equipment:
Barbell: 135/85, 155/105, 185/125, 205/145

AMRAP 17
10-8-6-4-2
Hang Power Clean
Burpee
Toes to Bar</code></pre><p>An entry applies to every movement that uses that equipment and carries no weight of its own.</p><p>A comma-separated list is one load per round: entry N is round N, and the last entry holds for the rest of the workout. One unit serves the whole list; bare numbers are pounds.</p><p>Rounds are AMRAP passes, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Rounds:</code> rounds, and EMOM intervals. A one-pass For Time ladder uses the first entry on every rung.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Vest:</code> inside the block is worn for the whole workout, like the <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Vest:</code> line, and takes one weight.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Workout Structure</h4><p style="margin-bottom: 0.5rem;">Organize multi-part workouts:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>3 Rounds:
10 Push Up
15 Air Squat
200m Run

Buy-in:
50cal Row

Then:
AMRAP 10
5 Pull Up
10 Push Up

Cash-out:
50cal Row</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Within 20:00
4 RFT
10 Burpee
15 Air Squat</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time
10 Burpee

Rest 2 minutes, then:
10 Burpee

Then, AMRAP 10:
5 Pull Up
10 Push Up</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>3 Rounds, For Time:
10 Burpee

3 Rounds, Not for Time:
10 Burpee</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Within 20:00
AMRAP:
5 Pull Up
10 Push Up</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Rounds</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">3 Rounds:, 5 Rounds For Time (one block)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Repeat</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Repeat x3: (every block that follows, three times)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Segments</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Blank line or Then: separates segments</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Buy-in / Cash-out</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Work before/after the main set</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Penalty</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Penalty: 20 Burpee (indented under a movement, paid on every break); Penalty (start at 0:00): also paid at that clock time</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Multi-part</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Part A - AMRAP 5, Part B - For Load</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Scaling</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Scaling: (followed by scaling options)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Sequencing</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Work: any order, Work: athlete choice</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Rotation</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Swap: when complete, Station 4 (swap)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Wearables</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Vest: 20/14 lb (worn for the whole workout)</td></tr></tbody></table><p>&quot;Sets&quot; is accepted as an alias for &quot;Rounds&quot; when parsing (e.g. <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">2 Sets:</code>), but generated output always writes &quot;Rounds&quot;.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">N Rounds:</code> rounds the one block under it. To repeat every block, open the workout with <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Repeat xN:</code>. (A leading <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">N Rounds:</code> with a blank line before its first block also wraps every block that follows.)</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">4 RFT</code> is shorthand for <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">4 Rounds For Time</code>; <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Within 5:00</code> is shorthand for <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">For Time (Time Cap: 5)</code>.</p><p>A segment separator can fuse with the header that follows it on one line: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Then, AMRAP 10:</code> and <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Rest 2 minutes, then:</code> both work, same as writing the separator and header on their own lines.</p><p>A rounds header&#39;s scoring can also be comma-attached: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">3 Rounds, For Time:</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">3 Rounds, Not for Time:</code>.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">AMRAP:</code> (or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">AMRAP Remaining Time:</code>) has no duration of its own; it fills whatever the workout&#39;s Time Cap (or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Within</code> window) has left after prior segments.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">EMOM / Interval Syntax</h4><p style="margin-bottom: 0.5rem;">Structure intervals with minute or station headers:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>EMOM 12
Odd: 5 Power Clean (135/95 lb)
Even: 12 Pull Up

EMOM 20
Minute 1: 15cal Row
Minute 2: 12 Dumbbell Snatch (50/35 lb)
Minute 3: 9 Bar Muscle Up
Minute 4: Rest</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Tabata 8
Air Squat

Tabata Slam Ball</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>EMOM 10
Minute 1 (Buy-in): 10 Burpee
Minute 2: 10 Push Up</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>E2MOM 20
Score: total work time
10 Handstand Push Up
100m Run</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Odd/Even</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Odd:, Even: (alternating minutes, or a Tabata&#39;s alternating rounds)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Minute headers</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Minute 1:, Min 1-3:, Minute 2 &amp; 3:, Minute 10+:</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Stations</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Station 1:, Station A:, Station 1 (Score):, Station 2 (swap):</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Intervals</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Interval 1:, Interval 2:, Interval 1-3:</td></tr></tbody></table><p style="margin-top: 0.5rem;"><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(Score)</code> marks the station whose completed rounds are the workout&#39;s score; <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(swap)</code> marks the pacer station whose completion triggers the team to rotate. See &quot;Station Pacing&quot; for details.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Minute</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Min</code>, and <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Interval</code> are the same header. Ranges (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">1-3</code>), lists (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">2 &amp; 3</code>), and open ends (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">10+</code>) work with any of them.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Tabata</code> alone defaults to 8 rounds of :20 work / :10 rest; <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Tabata 8</code> states the round count explicitly. <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Tabata &lt;Movement&gt;</code> puts the movement on the same line, like a rounds header with its element.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(Buy-in)</code> on a Minute/Station header tags that interval as the block&#39;s lead-in, printed back the same way.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Score:</code> names what the athlete records when the clock is not the score. Limberjack predicts <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">total work time</code> (the work in every interval, rest left out), <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">slowest round</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">fastest round</code> and <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">total reps</code>; any other phrase is kept as written. A plain <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">For Time</code> needs no <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Score:</code> line.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Team Workouts</h4><p style="margin-bottom: 0.5rem;">Specify partner or team formats:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Partners: alternating
For Time
100cal Row
80 Wall Ball (20/14 lb)
60 Burpee

Team (3): divide the work
For Time
150 Wall Ball (20/14 lb)</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>4 Rounds:
Partners: alternating
8 Man Makers (50/35 lb)
  Partner: Wall Sit</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Partners</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Partners: alternating (a team of two)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Partner</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Partner: Wall Sit (indented under a movement; the resting partner&#39;s companion work while it&#39;s performed)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Team</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Team (3): divide the work (a team of N)</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">alternating</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">One athlete works at a time, swapping every rep. Reps are split across the team.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">I go, you go</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Same as alternating.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">alternating rounds</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">One athlete completes a whole round, then the next takes a round. Nothing is split inside a round.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">divide the work</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Split the total reps across the team however you like, one athlete working at a time.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">divide the work evenly</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">The same split, held to equal shares.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">synchronized</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Everyone performs every rep at the same time. Nothing is split.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">follow the leader</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Everyone does the full work, but an athlete starts a movement only once the athlete ahead of them has finished it.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">parallel</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Everyone works at the same time on their own station. Reps are split across the team.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">relay</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">One athlete at a time completes the full quantity, then the next goes.</td></tr></tbody></table><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">parallel</code> expects <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Station 1:</code> / <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Station 2:</code> headers so each athlete has their own work. Without stations the description saves with a warning.</p><p>Splitting distributions divide reps, calories, and meters by team size. Movements that cannot be split (runs, shared carries, sled work) keep their full quantity.</p><p>Override one line with <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(split)</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(together)</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(each)</code>, or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(synchronized)</code>, e.g. <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">400m Run (split)</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">6 Deadlift (each)</code>.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Ladders</h4><p style="margin-bottom: 0.5rem;">Descending, ascending, or custom rep schemes:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>21-15-9
Thruster (95/65 lb)
Pull Up</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time
15-12-9-6-3 HSPU
+ 200m Run</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>E5MOM 20: 12-9-6
Thruster (75/55 lb)
Chest to Bar Pull Up</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>AMRAP 17
10-8-6-4-2
Hang Power Clean
Toes to Bar</code></pre><p style="margin-top: 0.5rem;"><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">+</code> prefix for fixed elements that repeat unchanged each round. An <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">AMRAP</code> header before a rep scheme repeats the ladder until the clock runs out; each pass is one round.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Ladders: Advanced Patterns</h4><p style="margin-bottom: 0.5rem;">Beyond basic descending and ascending rep schemes:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time (Time cap: 20)
21-15-9
Thruster (95/65 lb)
Pull Up
+ 400m Run
+ 10 Box Step Up (24/20&quot;)</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time (Accumulating)
1 Burpee
2 Air Squat
3 Kettlebell Swing
4 Pull Up
5 Toe To Bar</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Load
1 Squat Clean + 1 Hang Squat Clean</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Load
5-5-5+
Back Squat</code></pre><p>Fixed elements (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">+</code> prefix) are performed after each round of the ladder.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Accumulating</code> headers (&quot;12 Days of Christmas&quot; style) add a new element each round and repeat all previous elements in reverse order.</p><p>A complex chains movements with <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">+</code> on one line, e.g. <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">1 Squat Clean + 1 Hang Squat Clean</code>: unbroken from the floor, then a second rep without resetting.</p><p>A trailing <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">+</code> on a rep scheme (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">5-5-5+</code>) makes the last set max effort.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Notes &amp; Rules</h4><p style="margin-bottom: 0.5rem;">Add context with symbols or instruction blocks:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>* No rest between movements
** Scale to ring rows if needed

Notes:
This is a classic CrossFit benchmark.
Focus on unbroken sets.</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Rule symbols</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">*, **, ***, †, ‡, §</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Instruction blocks</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Notes:, Instructions:, Scaling:, Warmup:, Progression:</td></tr></tbody></table></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Element Prefixes</h4><p style="margin-bottom: 0.5rem;">Distance, calorie, and time prefixes go before the movement name:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>400m Run
500m Row
5k Run
1mi Run

20cal Bike
15cal Row
8/6cal Ski

0:30 Hollow Hold
1:30 Plank
2:00 Rest</code></pre><p>Distance-prefixed elements: the distance comes before the movement name (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">400m Run</code>, not <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Run 400m</code>).</p><p>Calorie-prefixed elements: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">15cal Row</code>. Gendered calories use a slash: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">8/6cal Ski</code>.</p><p>A space before the unit is accepted when parsing (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">8/6 cal Ski</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">400/300 meters Run</code>), but generated output always writes it glued to the number (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">8/6cal Ski</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">400/300m Run</code>). The one word unit, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">reps</code>, keeps its space: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Pull Up (8-10 reps)</code>.</p><p>Time-prefixed elements use <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">M:SS</code> (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">0:30 Hollow Hold</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">1:30 Plank</code>). Duration words (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">2 minutes</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">60 seconds</code>) only work before <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Rest</code>, not before other movement names.</p><p>Movements without an explicit quantity imply <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">1</code>: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Rope Climb (15ft)</code>.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Condition Details</h4><p style="margin-bottom: 0.5rem;">Reference for the value types accepted inside parentheses:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>10 Thruster (95/65 lb)
21 Kettlebell Swing (2/1.5 pd)
5 Clean and Jerk (135/95 kg)
5 Back Squat (225 lb)
3 Deadlift (315 lb)

7 Box Jump (24/20&quot;)
19 Box Step Over (20in, 50/35 lb)
6 Shuttle Run (10m)
1 Rope Climb (15ft)

3 Back Squat (80%)
5 Power Clean (85/75%)

Back Squat (Total: 10000lb)
Row (Total: 5000m)

0:30 Dead Hang
Plank (0:45)
Wall Sit (60 seconds)

Bike (20cal)
Row (15/12 cal)

Back Squat (Tempo: 3:0:X:0)
Pull Up (Tempo: 3:2:1:0)</code></pre><p>Weight units: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">lb</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">lbs</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">pounds</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">kg</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">kilograms</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">pd</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">pood</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">#</code> (saved as <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">lb</code>). Gendered weights use a slash.</p><p>Distance units: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">m</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">meters</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">km</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">mi</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">miles</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">yd</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">yards</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">ft</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">feet</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">in</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">inches</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">&quot;</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">&#39;</code>.</p><p>Percentages can be gendered (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">85/75%</code>) and may reference a lift: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">65% 1RM Back Squat</code>.</p><p>Tempo format is <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">eccentric:bottom:concentric:top</code>. Numbers are seconds to hold; <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">X</code> means explosive (no hold).</p><p>Mark a section&#39;s lead element with <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(Buy-in)</code> to identify it inside an interval block.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Multi-Score Workouts</h4><p style="margin-bottom: 0.5rem;">Workouts with multiple independently scored parts:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>[MULTI-SCORE]

Part 1 - For Time:
50 Wall Ball (20/14 lb)
40 Box Jump (24/20&quot;)
30 Toe To Bar

Part 2 - AMRAP 5:
10 Burpee
15 Kettlebell Swing (53/35 lb)</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>[MULTI-SCORE]

Part 1 (3x) - For Time:
10 Burpee

Part 2 - For Load:
5 Back Squat</code></pre><p>Prefix the workout with <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">[MULTI-SCORE]</code> to declare multiple scored parts.</p><p>Part headers accept letters or numbers: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Part 1 - For Time:</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Part A - AMRAP 5:</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Part 2 - For Load:</code>.</p><p>A part can also be a rest interval: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Part 3 - Rest 2:00</code>.</p><p>A repeat count sits between the part and its content: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Part 1 (3x) - For Time:</code> repeats that part&#39;s block 3 times.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Partner &amp; Team Work Distribution</h4><p style="margin-bottom: 0.5rem;">Reference for the distribution phrases recognized after `Partners:` or `Team (N):`:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>AMRAP 20
Partners: alternating
100 Pull Up
200 Push Up
300 Air Squat

For Time
Team (3): follow the leader
100 Burpee
200 Box Jump
300 Kettlebell Swing</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>AMRAP 20
Team (3): parallel
Station 1: Row (Max Cal)
Station 2: 15 Wall Ball (20/14 lb)
Station 3: 10 Burpee</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">alternating</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Splits the work. One athlete works at a time and the team swaps every rep.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">I go, you go</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Splits the work. Same as alternating.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">alternating rounds</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Does not split the work. One athlete completes a full round, then the next athlete takes the following round.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">divide the work</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Splits the work. The team partitions the total reps however they like, one athlete working at a time.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">divide the work evenly</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Splits the work into equal shares.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">divide the work, parallel</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Splits the work. Compound phrase: records the sharing rule and prices the workout as parallel.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">synchronized / sync</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Does not split the work. Every athlete performs every rep at the same time.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">follow the leader</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Does not split the work. Everyone performs every rep, but an athlete cannot start a movement until the athlete ahead of them has finished it, so the team trails the leader through the workout.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">parallel</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Splits the work. Every athlete works simultaneously at their own station.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">relay</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Does not split the work. One athlete at a time completes the full quantity before the next goes.</td></tr></tbody></table><p>Splitting distributions divide reps, calories, and meters by team size, so <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">150 Wall Ball</code> under <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Team (3)</code> is 50 each.</p><p>Movements that cannot be split keep their full quantity for every athlete: runs and other group locomotion, shared-object carries, sled push and pull, tire flips.</p><p>Override a single line with <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(split)</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(together)</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(each)</code>, or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(synchronized)</code>, e.g. <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">400m Run (split)</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">100 Wall Ball (together)</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">6 Deadlift (each)</code>.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">parallel</code> expects <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Station N:</code> headers so each athlete has their own work. Without stations the description saves with a warning.</p><p>The reverse also holds: station headers imply <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">parallel</code>. The estimate prices a station workout as parallel no matter what distribution was typed, leaves the description as written, and warns when the two disagree. See &quot;Station Pacing&quot; for the rotation model.</p><p>Time estimates follow the distribution: splitting distributions serialize the shares, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">synchronized</code> and <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">alternating rounds</code> take about as long as the same workout done solo, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">parallel</code> finishes in one athlete&#39;s share, and <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">relay</code> multiplies by team size.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">follow the leader</code> costs the solo time plus one turn on the longest movement for every athlete behind the leader, since the last athlete cannot start until the athletes ahead of them have cleared each movement. Each athlete&#39;s own working time stays the solo time.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Station Pacing</h4><p style="margin-bottom: 0.5rem;">Mark a pacer station, or declare that the whole team waits for every station, so rotations can be counted:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>AMRAP 31
Partners: parallel
Station 1 (Score):
8 Thruster (155/105)
6 Rope Climb (15ft)
11 Box Jump (30/24in)

Station 2 (swap):
400m Run</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>AMRAP 30
Team (4): parallel
Swap: when complete
Station 1:
Ski Erg (Max Cal)

Station 2:
Toes to Ring (Max Reps)

Station 3:
Power Snatch (Max Reps, 95/65)

Station 4:
200m Plate Carry (45/35)</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">(Score)</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Marks the station whose completed rounds are the workout&#39;s score.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">(swap)</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Marks the pacer station. Finishing its prescribed work triggers the rotation; the scored station&#39;s work continues from wherever the outgoing athlete left off.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">Swap: when complete</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">No pacer. All prescribed work at every station must finish before anyone rotates, so the slowest station is the blocker.</td></tr></tbody></table><p>Rotations and rounds are different counts. A rotation happens every time the pacer station completes. A round is one full pass through the scored station&#39;s movements, and the estimate counts rounds from the reps both athletes accumulate there across rotations, since the work carries over rather than restarting.</p><p>With <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(swap)</code>, the rotation lasts as long as the pacer station takes.</p><p>With <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Swap: when complete</code>, the rotation lasts as long as the slowest station that has a fixed quantity to complete. A max-effort station (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Max Reps</code> / <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Max Cal</code> / <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Max Distance</code> / <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Max Duration</code>) has no finish line of its own, so it never sets the pace; it simply fills whatever window the slowest bounded station opens.</p><p>Rounds are the number of rotations that fit inside the clock.</p><p>Every athlete visits every station once per rotation.</p><p>Any team size works. Each athlete starts at a different station and moves on at every rotation; a team smaller than the station count leaves a station empty each round.</p><p>Station headers imply <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">parallel</code>. The estimate prices the workout as parallel no matter what distribution was typed, and warns when the two disagree.</p><p>A station movement with no rep count warns to add a quantity or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(Max Reps)</code>, since an unmarked bare movement prices as a single rep and inflates the round count.</p><p>Round estimates stop at 200 with a warning; a rotation that short almost always means a station&#39;s quantity was misread.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Death By</h4><p style="margin-bottom: 0.5rem;">Add work every minute until the athlete cannot finish inside the minute:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Death By
Burpee</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Death By
10 Burpee (+1)

Death By
3 Thruster (95/65 lb, +3)</code></pre><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Death By</code> on its own implies one rep and a step of one, so <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Death By / Burpee</code> saves and prints back as <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Death By / 1 Burpee (+1)</code>.</p><p>The quantity is the first minute&#39;s work and the <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">+N</code> is what each later minute adds.</p><p>There is no round count to write. The estimate predicts the round where the work stops fitting inside the minute, and Est. Time is that prediction: every completed round plus the failed attempt, which still burns its whole minute.</p><p>With more than one movement, the failure prediction follows the first movement that increments.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Penalties</h4><p style="margin-bottom: 0.5rem;">Work the athlete owes each time they break a movement:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time
150 Wall Ball (20/14 lb)
  Penalty: 20 Burpee</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time:
Back Squat (Total: 10000lb)
  Penalty: 20 Burpees</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time
150 Wall Ball (20/14 lb)
  Penalty (start at 0:00): 20 Burpee</code></pre><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Penalty:</code> attaches to the movement above it, so indent it under that line. A penalty with no movement above it is ignored.</p><p>The penalty is the cost of breaking: put the barbell down, drop off the bar, stop the set, and you owe the penalty before continuing.</p><p>Estimates charge it. The engine predicts how many times the athlete breaks by comparing the prescribed work to the movement&#39;s capacity, then adds the penalty work and time once per break. A movement well inside the athlete&#39;s capacity predicts no breaks and costs nothing.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Penalty (start at 0:00):</code> is paid at that workout clock time as well as at every break: the athlete does the block at 3-2-1-go, then again each time they break. Estimates charge the start payment once, before the first movement, so every line after it starts with that fatigue. A later clock time (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">start at 5:00</code>) is paid before the first movement that begins at or after it. A block paid only once is a buy-in, not a penalty.</p><p>One penalty per movement. Several movements in the same workout can each carry their own.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Clock-Time Blocks</h4><p style="margin-bottom: 0.5rem;">Work done once when the workout clock reaches a time, stopping whatever the athlete is doing:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time
1000m Row
50 Wall Ball
At 4:00: 20 Dumbbell Push Up</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time
1000m Row
50 Wall Ball

At 4:00:
20 Dumbbell Push Up
10 Burpee</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>AMRAP 12
Bike (Max Cal)
At 0:00: 20 Dumbbell Push Up
At 2:00: 100m Farmers Carry
At 4:00: 20 Dumbbell Push Up</code></pre><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">At 4:00:</code> takes a clock time in minutes and seconds and needs the colon after it. Write one <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">At</code> line per time.</p><p>The time counts from the start of the part the line sits in. A Buy-in or an earlier part before it is not counted.</p><p>A movement on the <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">At</code> line&#39;s own row is the whole block. With the header on its own row, every line under it belongs to the block, up to the next blank line.</p><p>Works in a For Time and in an AMRAP. The athlete stops at the time, does the block, then picks up where they left off; the estimate prices the rest of the work on the fatigue the block left. An AMRAP keeps going round to its cap.</p><p>A block the clock never reaches (the work is done first) is never done.</p><p>To repeat a block every minute instead, tag the movement <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(EMOM)</code> or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(E2MOM)</code>.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Cumulative Totals</h4><p style="margin-bottom: 0.5rem;">Give the athlete a volume target instead of a rep count:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time:
Back Squat (Total: 10000lb)
  Penalty: 20 Burpees</code></pre><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Total: &lt;value&gt;&lt;unit&gt;</code> accumulates volume: the athlete chooses the load and the rep scheme and stops when the total is reached.</p><p>Weight, distance, calorie, and duration totals are all accepted. A weight total is converted to a rep estimate using an explicit load on the same element, or the movement&#39;s assumed working load.</p><p>The unit is required: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Total: 100</code> alone is not recognized.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Work Sequencing</h4><p style="margin-bottom: 0.5rem;">Say whether the athlete may reorder or partition the movements:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time
Work: any order
100 Pull Up
200 Push Up
300 Air Squat</code></pre><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">as written</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Perform the movements in the order listed. This is the default.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">in order</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Same as as written.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">any order</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">The athlete picks the order.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">in any order</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Same as any order.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">athlete choice</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">The athlete picks the order and how to break up the reps.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">as desired</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Same as athlete choice.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">break and switch</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Break each movement up and switch between them.</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">partition as needed</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">Split the reps across the movements however the athlete likes.</td></tr></tbody></table><p>The line goes with the header, alongside <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Partners:</code> / <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Team (N):</code>.</p><p>Reorderable modes change the time estimate: the engine prices the sequence the athlete would actually choose rather than the order as typed.</p><p>Under <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">athlete choice</code>, rep movements are broken up but a distance or calorie effort stays whole: nobody runs 2000m in 333m parts. Add <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">(athlete choice)</code> to that line (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">2000m Run (athlete choice)</code>) and the estimate breaks it into gym-friendly pieces too, bigger ones past 1000 (10 x 200m, 5 x 400m) and smaller ones below (10m of walking lunge).</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Wearables</h4><p style="margin-bottom: 0.5rem;">Add a load the athlete carries through the whole workout:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Time
Vest: 20/14 lb
1mi Run
100 Pull Up
200 Push Up
300 Air Squat</code></pre><p>The line goes with the header, alongside <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Partners:</code> / <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Work:</code>.</p><p>The load applies to every movement, so it is written once rather than as a condition on each line.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Scaling Sections</h4><p style="margin-bottom: 0.5rem;">Provide scaling options after the workout body:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Scaling:
Rx+: Use strict pull ups
Rx: As written
Scaled: Use ring rows instead of pull ups
Beginner: Use jumping pull ups</code></pre><p>Format: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">&lt;Level Name&gt;: &lt;description&gt;</code>.</p><p>Level names must start with a capital letter.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Rules</h4><p style="margin-bottom: 0.5rem;">Add per-element notes that attach to symbols referenced in the workout body:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>10* Wall Walk
5** Muscle Up

* Scale to Inchworm
** Scale to Pull Up + Dip</code></pre><p>Reference a rule on an element with a trailing symbol (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">*</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">**</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">***</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">†</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">‡</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">§</code>).</p><p>Define the rule on its own line at the bottom of the workout, prefixed by the same symbol.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Progression &amp; Instructions Sections</h4><p style="margin-bottom: 0.5rem;">Provide warmup ramps, notes, or instructions alongside the workout:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Load (Time cap: 15)
1 Power Clean (Max Load)

Progression:
2 reps @ 65%
2 reps @ 70%
1 rep @ 75%
1 rep @ 80%
1 rep @ 85%
1 rep @ 90%
Then attempt 95%+</code></pre><p>Supported section headers: <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Progression:</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Warmup:</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Warm-up:</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Notes:</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Instructions:</code>.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Rest Periods</h4><p style="margin-bottom: 0.5rem;">Add rest within or between segments:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>2:00 Rest
Rest 1:30
60 seconds Rest</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>5 Rounds (For Time):
10 Burpee
20 Air Squat
~ Rest: Work time</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>5 Rounds (For Time, Rest=Work x2):
10 Burpee
20 Air Squat</code></pre><p>Use <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Rest &lt;duration&gt;</code> or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">&lt;duration&gt; Rest</code> between elements for explicit pauses.</p><p><code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">~ Rest: Work time</code> defines dynamic rest equal to working time.</p><p>Add a multiplier with <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Work time x2</code> or use a header form like <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Rest=Work x2</code> on the rounds line.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Unit Aliases</h4><p style="margin-bottom: 0.5rem;">Recognized units by category (sourced from units.yml):</p><h5 style="font-weight: 500; font-size: 0.875rem; margin-top: 0.75rem; margin-bottom: 0.25rem;">Distance</h5><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">meters</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">m — meters, meter</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">kilometers</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">km — kilometers, kilometer, k, K</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">miles</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">mi — miles, mile</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">yards</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">yd — yards, yard, yds</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">feet</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">ft — feet, foot, &#39;</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">inches</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">in — inches, inch, &quot;, &#39;&#39;</td></tr></tbody></table><h5 style="font-weight: 500; font-size: 0.875rem; margin-top: 0.75rem; margin-bottom: 0.25rem;">Weight</h5><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">pounds</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">lb — pounds, pound, lbs, #</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">kilograms</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">kg — kilograms, kilogram, kgs</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">pood</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">pd — pood, poods</td></tr></tbody></table><h5 style="font-weight: 500; font-size: 0.875rem; margin-top: 0.75rem; margin-bottom: 0.25rem;">Time</h5><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">seconds</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">s — seconds, second, secs, sec</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">minutes</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">min — minutes, minute, mins</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">hours</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">hr — hours, hour, hrs, h</td></tr></tbody></table><h5 style="font-weight: 500; font-size: 0.875rem; margin-top: 0.75rem; margin-bottom: 0.25rem;">Measurement</h5><table class="data-table" style="width: 100%; border-collapse: collapse; margin-top: 0.5rem;"><tbody><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">calories</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">cal — calories, calorie, cals</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">reps</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">reps — rep, repetitions, repetition, count</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">rounds</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">rounds — round</td></tr><tr style="border-bottom: 1px solid var(--border-color, #e5e7eb);"><td class="data-cell" style="padding: 0.25rem 0.75rem 0.25rem 0; font-weight: 500; white-space: nowrap; vertical-align: top;">percent</td><td class="data-cell" style="padding: 0.25rem 0; font-family: monospace; font-size: 0.8rem;">% — percent</td></tr></tbody></table></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Invalid Patterns to Avoid</h4><p style="margin-bottom: 0.5rem;">Common mistakes the parser will reject or misread:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>BAD:  Thruster (10 @ 95/65 lb)
GOOD: 10 Thruster (95/65 lb)

BAD:  Run 400m
GOOD: 400m Run

BAD:  Row 500 meters
GOOD: 500m Row

BAD:  Do 3 rounds of:
GOOD: 3 Rounds:

BAD:  Complete ASAP:
GOOD: For Time

BAD:  10 Thruster ((95/65 lb))
GOOD: 10 Thruster (95/65 lb)

BAD:  Perform ten thrusters with ninety-five pounds for men
GOOD: 10 Thruster (95/65 lb)</code></pre><p>Don&#39;t mix the quantity into the condition; the quantity always precedes the movement name.</p><p>Don&#39;t put distance after the movement name for distance-prefixed elements.</p><p>Don&#39;t invent header phrases. Use the canonical forms (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">For Time</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">3 Rounds:</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">AMRAP 20</code>).</p><p>Don&#39;t nest parentheses.</p><p>Don&#39;t use prose descriptions in place of structured elements.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Writing Tips</h4><p style="margin-bottom: 0.5rem;">Conventions that keep workouts parsing cleanly:</p><p>Element names should match your library exactly. The parser canonicalizes common variations (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Thrusters</code> -&gt; <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Thruster</code>, <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Pull-ups</code> -&gt; <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Pull Up</code>), but unknown elements emit a warning.</p><p>Prefer the singular form (<code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Burpee</code>, not <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Burpees</code>); the parser normalizes either way but singular keeps inputs consistent with the canonical output.</p><p>Blank lines between sections matter: a blank line ends a segment and starts a new one.</p><p>The parser ignores extra whitespace within a line, so indentation is purely for human readability.</p><p>Use <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Notes:</code> or <code style="background: var(--surface-secondary, #f3f4f6); padding: 0.1rem 0.3rem; border-radius: 0.25rem; font-size: 0.8rem;">Instructions:</code> for narrative text. It is stored at the workout level without parser interpretation.</p><p>After saving, compare the regenerated description to your input. If it differs significantly, adjust your input to match the canonical shape rather than fighting the parser.</p><p>Test new patterns by pasting them into the Workout Builder. The live preview shows the parser&#39;s interpretation immediately.</p></div><div style="margin-bottom: 1.5rem;"><h4 style="font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem;">Worked Examples</h4><p style="margin-bottom: 0.5rem;">Complete workout descriptions exercising multiple features at once:</p><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>EMOM 24
Minute 1: Ski (Max Cal)
Minute 2: Clean and Jerk (Max Reps, 135/95 lb)
Minute 3 &amp; 4: 200m Run
Minute 5: Snatch (Max Reps, 135/95 lb)
Minute 6: 0:30 Russian Twist (20/15 lb)

* Score total reps. 200m Run counts as 1.

Scaling:
Consistency: 115/85 lb
Mechanics: 95/65 lb</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>For Load
5-5-3-3-3
Back Squat

1 Back Squat (Max Load)

* Rest 2-3 minutes between sets.</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>[MULTI-SCORE]

Part A - For Load:
1-1-1-1-1
Clean and Jerk

Part B - For Load:
5-5-5
Back Squat (100 kg)</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>AMRAP 20
Partners: alternating
5 Pull Up
10 Push Up
15 Air Squat</code></pre><pre class="code-block" style="background: var(--surface-secondary, #f3f4f6); border-radius: 0.375rem;
                    padding: 0.75rem; font-size: 0.8rem; line-height: 1.5;
                    overflow-x: auto; margin: 0.5rem 0;"><code>Buy-in:
50cal Row

For Time (Time Cap: 15)
21-15-9
Thruster (95/65 lb)
Pull Up

Cash-out:
50cal Row

Scaling:
Rx: As written
Scaled: (65/45 lb), Ring Rows</code></pre></div></div></div></dialog></template></turbo-stream>