Add a Running exercise with an animated stride figure
Stance and flight keyframes with single-frame foot pins for the strikes, forward lean, opposite-arm drive, and daylight under both feet in flight — distinct from Cardio's high-knee march, which stays as is. Claude-Session: https://claude.ai/code/session_01PKptrgbx74peTwHGRxBojv
This commit is contained in:
@@ -1,5 +1,17 @@
|
|||||||
**July 2026**
|
**July 2026**
|
||||||
|
|
||||||
|
A new Running exercise joins the library with its own animated stride figure.
|
||||||
|
|
||||||
|
Exercise figures no longer glitch mid-rep — bars, hands, and feet stay planted instead of snapping or windmilling.
|
||||||
|
|
||||||
|
Many exercise figures were re-posed for accuracy — the butterfly stretch now sits on the floor, the bench press bar travels straight up, and seated machine figures keep their feet on the ground.
|
||||||
|
|
||||||
|
Fixed a crash when a workout that was open on screen got deleted from another device.
|
||||||
|
|
||||||
|
Ad hoc workouts on the Today board now file under their routine's goal instead of Unassigned.
|
||||||
|
|
||||||
|
The Progress tab title now opens with a rotating daily motto, like the Today board.
|
||||||
|
|
||||||
Cardio routines can now set a target heart rate — the run screen on watch and iPhone shows your live pulse with a cue to push harder or ease off.
|
Cardio routines can now set a target heart rate — the run screen on watch and iPhone shows your live pulse with a cue to push harder or ease off.
|
||||||
|
|
||||||
The exercise screen now uses the full display in landscape by hiding the tab bar.
|
The exercise screen now uses the full display in landscape by hiding the tab bar.
|
||||||
|
|||||||
+5
-5
@@ -15,7 +15,7 @@ Data flows one way: you edit the **source**, run `render.py --export`, and the
|
|||||||
**bundle** is overwritten. Never hand-edit anything under
|
**bundle** is overwritten. Never hand-edit anything under
|
||||||
`Workouts/Resources/ExerciseMotions/` — it is regenerated.
|
`Workouts/Resources/ExerciseMotions/` — it is regenerated.
|
||||||
|
|
||||||
As of this writing the catalog is **64 exercises**.
|
As of this writing the catalog is **65 exercises**.
|
||||||
|
|
||||||
```
|
```
|
||||||
Exercise Library/ ← authoring source (repo root)
|
Exercise Library/ ← authoring source (repo root)
|
||||||
@@ -23,7 +23,7 @@ Exercise Library/ ← authoring source (repo root)
|
|||||||
├── skeleton.json ← shared rig: bone lengths + joint ROM
|
├── skeleton.json ← shared rig: bone lengths + joint ROM
|
||||||
├── render.py kinematics.py ← the render pipeline + the FK math
|
├── render.py kinematics.py ← the render pipeline + the FK math
|
||||||
├── contact-sheet.png demo-sheet.png ← generated QA sheets
|
├── contact-sheet.png demo-sheet.png ← generated QA sheets
|
||||||
└── <Exercise Name>/ ← one folder per exercise, 64 of them
|
└── <Exercise Name>/ ← one folder per exercise, 65 of them
|
||||||
├── info.md ← AUTHORED: the reference page
|
├── info.md ← AUTHORED: the reference page
|
||||||
├── motion.json ← AUTHORED: the rig script (canonical visual source)
|
├── motion.json ← AUTHORED: the rig script (canonical visual source)
|
||||||
├── frames/frame-N.svg ← generated: one SVG per key frame
|
├── frames/frame-N.svg ← generated: one SVG per key frame
|
||||||
@@ -35,8 +35,8 @@ Exercise Library/ ← authoring source (repo root)
|
|||||||
▼
|
▼
|
||||||
Workouts/Resources/ExerciseMotions/ ← bundle (flat, unique basenames)
|
Workouts/Resources/ExerciseMotions/ ← bundle (flat, unique basenames)
|
||||||
├── skeleton.json
|
├── skeleton.json
|
||||||
├── <Exercise Name>.motion.json ← 64
|
├── <Exercise Name>.motion.json ← 65
|
||||||
└── <Exercise Name>.info.md ← 64
|
└── <Exercise Name>.info.md ← 65
|
||||||
|
|
||||||
│ Bundle.main lookups
|
│ Bundle.main lookups
|
||||||
▼
|
▼
|
||||||
@@ -208,7 +208,7 @@ three kinds of file:
|
|||||||
|
|
||||||
The generated SVGs and GIFs do **not** ship — the app renders the figure live
|
The generated SVGs and GIFs do **not** ship — the app renders the figure live
|
||||||
from the rig instead. The rename to `<Name>.motion.json` / `<Name>.info.md` is
|
from the rig instead. The rename to `<Name>.motion.json` / `<Name>.info.md` is
|
||||||
what lets Xcode's flat resource copy hold all 64 without collision.
|
what lets Xcode's flat resource copy hold all 65 without collision.
|
||||||
|
|
||||||
## The app-side consumers (`Workouts/ExerciseFigure/`)
|
## The app-side consumers (`Workouts/ExerciseFigure/`)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
|
||||||
|
<title>Running</title>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="grad-leg_l-0" gradientUnits="userSpaceOnUse" x1="164.1" y1="91.6" x2="152.1" y2="121.0"><stop offset="0" stop-color="#47b0a5"/><stop offset="1" stop-color="#86cfc5"/></linearGradient>
|
||||||
|
<linearGradient id="grad-leg_r-1" gradientUnits="userSpaceOnUse" x1="166.8" y1="122.9" x2="160.7" y2="149.9"><stop offset="0" stop-color="#0d9488"/><stop offset="1" stop-color="#53b6ab"/></linearGradient>
|
||||||
|
<linearGradient id="grad-leg_r-2" gradientUnits="userSpaceOnUse" x1="160.7" y1="149.9" x2="168.2" y2="151.5"><stop offset="0" stop-color="#53b6ab"/><stop offset="1" stop-color="#59b9ae"/></linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path d="M 108.5 157.5 L 210.8 157.5 L 210.8 150.2 L 108.5 150.2 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
|
||||||
|
<g id="leg_l">
|
||||||
|
<path d="M 164.1 91.6 L 152.1 121.0" stroke="url(#grad-leg_l-0)" stroke-width="3.68145" stroke-linecap="round"/>
|
||||||
|
<path d="M 152.1 121.0 L 125.8 111.6" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 125.8 111.6 L 121.0 117.6" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="leg_r">
|
||||||
|
<path d="M 160.0 92.0 L 166.8 122.9" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 166.8 122.9 L 160.7 149.9" stroke="url(#grad-leg_r-1)" stroke-width="3.99764" stroke-linecap="round"/>
|
||||||
|
<path d="M 160.7 149.9 L 168.2 151.5" stroke="url(#grad-leg_r-2)" stroke-width="3.77767" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="arm_l">
|
||||||
|
<path d="M 174.5 33.4 L 183.3 52.2" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 183.3 52.2 L 202.4 43.4" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<path id="girdle" d="M 174.5 33.4 L 170.3 33.4 L 170.3 34.7" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="pelvisBar" d="M 164.1 91.6 L 160.0 91.1 L 160.0 92.0" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="spine" d="M 160.0 91.1 Q 165.3 61.6 170.3 33.4" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<g id="arm_r">
|
||||||
|
<path d="M 170.3 34.7 L 156.8 50.6" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 156.8 50.6 L 172.9 63.9" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<circle id="head" cx="173.7" cy="20.0" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
|
||||||
|
<line id="nose" x1="180.7" y1="20.7" x2="185.6" y2="21.2" stroke="#3a3f4b" stroke-width="2.8" stroke-linecap="round"/>
|
||||||
|
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
|
||||||
|
<line x1="224" y1="16" x2="238" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="243" y="20">near</text>
|
||||||
|
<line x1="273" y1="16" x2="287" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="292" y="20">far</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,37 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
|
||||||
|
<title>Running</title>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="grad-leg_l-0" gradientUnits="userSpaceOnUse" x1="164.1" y1="89.5" x2="187.3" y2="111.6"><stop offset="0" stop-color="#4cb3a8"/><stop offset="1" stop-color="#86cfc5"/></linearGradient>
|
||||||
|
<linearGradient id="grad-leg_r-2" gradientUnits="userSpaceOnUse" x1="120.7" y1="125.5" x2="121.7" y2="133.0"><stop offset="0" stop-color="#0d9488"/><stop offset="1" stop-color="#219e92"/></linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path d="M 108.5 157.4 L 210.8 157.4 L 210.8 150.2 L 108.5 150.2 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
|
||||||
|
<g id="leg_l">
|
||||||
|
<path d="M 164.1 89.5 L 187.3 111.6" stroke="url(#grad-leg_l-0)" stroke-width="3.66725" stroke-linecap="round"/>
|
||||||
|
<path d="M 187.3 111.6 L 164.6 127.8" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 164.6 127.8 L 168.6 134.3" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="arm_l">
|
||||||
|
<path d="M 174.5 31.3 L 172.3 51.9" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 172.3 51.9 L 191.1 61.0" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="leg_r">
|
||||||
|
<path d="M 160.0 89.9 L 147.9 119.3" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 147.9 119.3 L 120.7 125.5" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 120.7 125.5 L 121.7 133.0" stroke="url(#grad-leg_r-2)" stroke-width="4.1411" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<path id="girdle" d="M 174.5 31.3 L 170.3 31.3 L 170.3 32.6" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="pelvisBar" d="M 164.1 89.5 L 160.0 89.0 L 160.0 89.9" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="spine" d="M 160.0 89.0 Q 165.3 59.5 170.3 31.3" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<g id="arm_r">
|
||||||
|
<path d="M 170.3 32.6 L 168.1 53.2" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 168.1 53.2 L 187.0 62.3" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<circle id="head" cx="173.7" cy="17.9" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
|
||||||
|
<line id="nose" x1="180.7" y1="18.6" x2="185.6" y2="19.1" stroke="#3a3f4b" stroke-width="2.8" stroke-linecap="round"/>
|
||||||
|
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
|
||||||
|
<line x1="224" y1="16" x2="238" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="243" y="20">near</text>
|
||||||
|
<line x1="273" y1="16" x2="287" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="292" y="20">far</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,36 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
|
||||||
|
<title>Running</title>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="grad-leg_l-0" gradientUnits="userSpaceOnUse" x1="164.1" y1="91.6" x2="170.2" y2="122.8"><stop offset="0" stop-color="#48b1a6"/><stop offset="1" stop-color="#86cfc5"/></linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path d="M 108.5 157.5 L 210.8 157.5 L 210.8 150.2 L 108.5 150.2 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
|
||||||
|
<g id="leg_l">
|
||||||
|
<path d="M 164.1 91.6 L 170.2 122.8" stroke="url(#grad-leg_l-0)" stroke-width="3.67976" stroke-linecap="round"/>
|
||||||
|
<path d="M 170.2 122.8 L 159.3 148.2" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 159.3 148.2 L 166.4 151.1" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="arm_l">
|
||||||
|
<path d="M 174.5 33.4 L 161.0 49.3" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 161.0 49.3 L 177.1 62.6" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="leg_r">
|
||||||
|
<path d="M 160.0 92.0 L 147.9 121.4" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 147.9 121.4 L 121.6 111.9" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 121.6 111.9 L 116.9 117.9" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<path id="girdle" d="M 174.5 33.4 L 170.3 33.4 L 170.3 34.7" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="pelvisBar" d="M 164.1 91.6 L 160.0 91.1 L 160.0 92.0" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="spine" d="M 160.0 91.1 Q 165.3 61.6 170.3 33.4" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<g id="arm_r">
|
||||||
|
<path d="M 170.3 34.7 L 179.2 53.5" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 179.2 53.5 L 198.2 44.7" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<circle id="head" cx="173.7" cy="20.0" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
|
||||||
|
<line id="nose" x1="180.7" y1="20.7" x2="185.6" y2="21.2" stroke="#3a3f4b" stroke-width="2.8" stroke-linecap="round"/>
|
||||||
|
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
|
||||||
|
<line x1="224" y1="16" x2="238" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="243" y="20">near</text>
|
||||||
|
<line x1="273" y1="16" x2="287" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="292" y="20">far</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
|
||||||
|
<title>Running</title>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="grad-leg_l-0" gradientUnits="userSpaceOnUse" x1="164.1" y1="89.5" x2="152.1" y2="118.9"><stop offset="0" stop-color="#4cb3a8"/><stop offset="1" stop-color="#86cfc5"/></linearGradient>
|
||||||
|
<linearGradient id="grad-leg_r-1" gradientUnits="userSpaceOnUse" x1="183.2" y1="111.9" x2="160.5" y2="128.1"><stop offset="0" stop-color="#0d9488"/><stop offset="1" stop-color="#0f9589"/></linearGradient>
|
||||||
|
<linearGradient id="grad-leg_r-2" gradientUnits="userSpaceOnUse" x1="160.5" y1="128.1" x2="164.5" y2="134.6"><stop offset="0" stop-color="#0f9589"/><stop offset="1" stop-color="#27a195"/></linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path d="M 108.5 157.4 L 210.8 157.4 L 210.8 150.2 L 108.5 150.2 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
|
||||||
|
<g id="leg_l">
|
||||||
|
<path d="M 164.1 89.5 L 152.1 118.9" stroke="url(#grad-leg_l-0)" stroke-width="3.66725" stroke-linecap="round"/>
|
||||||
|
<path d="M 152.1 118.9 L 124.8 125.1" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 124.8 125.1 L 125.9 132.6" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="arm_l">
|
||||||
|
<path d="M 174.5 31.3 L 172.3 51.9" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 172.3 51.9 L 191.1 61.0" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="leg_r">
|
||||||
|
<path d="M 160.0 89.9 L 183.2 111.9" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 183.2 111.9 L 160.5 128.1" stroke="url(#grad-leg_r-1)" stroke-width="4.19308" stroke-linecap="round"/>
|
||||||
|
<path d="M 160.5 128.1 L 164.5 134.6" stroke="url(#grad-leg_r-2)" stroke-width="4.11689" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<path id="girdle" d="M 174.5 31.3 L 170.3 31.3 L 170.3 32.6" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="pelvisBar" d="M 164.1 89.5 L 160.0 89.0 L 160.0 89.9" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="spine" d="M 160.0 89.0 Q 165.3 59.5 170.3 31.3" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<g id="arm_r">
|
||||||
|
<path d="M 170.3 32.6 L 168.1 53.2" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 168.1 53.2 L 187.0 62.3" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<circle id="head" cx="173.7" cy="17.9" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
|
||||||
|
<line id="nose" x1="180.7" y1="18.6" x2="185.6" y2="19.1" stroke="#3a3f4b" stroke-width="2.8" stroke-linecap="round"/>
|
||||||
|
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
|
||||||
|
<line x1="224" y1="16" x2="238" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="243" y="20">near</text>
|
||||||
|
<line x1="273" y1="16" x2="287" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="292" y="20">far</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,43 @@
|
|||||||
|
# Running
|
||||||
|
|
||||||
|
Steady, easy-pace running — an upright posture with a slight forward lean from
|
||||||
|
the ankles, a light midfoot landing under the hips, and a relaxed, efficient
|
||||||
|
stride. Run in place, on a treadmill, or outdoors; your Apple Watch records
|
||||||
|
the real effort — heart rate, calories, and duration — as a running workout.
|
||||||
|
|
||||||
|
- **Category:** Cardio
|
||||||
|
- **Type:** Aerobic / conditioning
|
||||||
|
- **Targets:** Heart, lungs, legs, endurance
|
||||||
|
- **Prescription:** 15–30 minutes at a conversational-to-brisk pace
|
||||||
|
- **Defaults:** 1 × 1200 s
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Stand tall with a slight forward lean from the ankles, not the waist. Let
|
||||||
|
your watch start the session so the effort is tracked on your wrist.
|
||||||
|
|
||||||
|
## Execution
|
||||||
|
|
||||||
|
1. Ease in for the first minute or two, letting your heart rate climb.
|
||||||
|
2. Land lightly on your midfoot, under your hips — not out in front.
|
||||||
|
3. Drive your knees forward and let your arms swing opposite your legs.
|
||||||
|
4. Favor a quicker cadence over a longer stride; settle into a pace you can
|
||||||
|
hold for the whole block.
|
||||||
|
5. Cool down with an easy minute before you stop.
|
||||||
|
|
||||||
|
## Cues
|
||||||
|
|
||||||
|
- Keep your posture tall, with the lean coming from the ankles.
|
||||||
|
- Relax your shoulders and keep your elbows around 90 degrees.
|
||||||
|
- Aim for a pace where you could speak in short sentences, not full paragraphs.
|
||||||
|
|
||||||
|
## Common Mistakes
|
||||||
|
|
||||||
|
- Overstriding — reaching the foot out ahead of the hips on landing.
|
||||||
|
- Starting too hard and fading long before the time is up.
|
||||||
|
- Hunching forward at the waist instead of leaning from the ankles.
|
||||||
|
|
||||||
|
## Progression
|
||||||
|
|
||||||
|
Add minutes, lift the pace, or fold in short faster intervals to raise the
|
||||||
|
challenge over time.
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"name": "Running",
|
||||||
|
"primary": 4,
|
||||||
|
"camera": {"zoom": 0.7},
|
||||||
|
"working": ["leg_r", "leg_l"],
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"hold": 0.08, "tween": 0.38,
|
||||||
|
"root": {"pos": [160, 65], "pitch": 10},
|
||||||
|
"spine": [0, 0],
|
||||||
|
"neck": 4, "head": -8,
|
||||||
|
"shoulder_r": -30, "elbow_r": 90,
|
||||||
|
"shoulder_l": 35, "elbow_l": 90,
|
||||||
|
"hip_r": 25, "knee_r": 30, "ankle_r": 0,
|
||||||
|
"hip_l": -12, "knee_l": 88, "ankle_l": -18,
|
||||||
|
"pins": {"foot_r": [161, 149]}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hold": 0.06, "tween": 0.32,
|
||||||
|
"root": {"pos": [160, 62], "pitch": 10},
|
||||||
|
"spine": [0, 0],
|
||||||
|
"neck": 4, "head": -8,
|
||||||
|
"shoulder_r": 4, "elbow_r": 70,
|
||||||
|
"shoulder_l": 4, "elbow_l": 70,
|
||||||
|
"hip_r": -12, "knee_r": 55, "ankle_r": -5,
|
||||||
|
"hip_l": 56, "knee_l": 100, "ankle_l": -5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hold": 0.08, "tween": 0.38,
|
||||||
|
"root": {"pos": [160, 65], "pitch": 10},
|
||||||
|
"spine": [0, 0],
|
||||||
|
"neck": 4, "head": -8,
|
||||||
|
"shoulder_r": 35, "elbow_r": 90,
|
||||||
|
"shoulder_l": -30, "elbow_l": 90,
|
||||||
|
"hip_l": 25, "knee_l": 30, "ankle_l": 0,
|
||||||
|
"hip_r": -12, "knee_r": 88, "ankle_r": -18,
|
||||||
|
"pins": {"foot_l": [159, 149]}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hold": 0.06, "tween": 0.32,
|
||||||
|
"root": {"pos": [160, 62], "pitch": 10},
|
||||||
|
"spine": [0, 0],
|
||||||
|
"neck": 4, "head": -8,
|
||||||
|
"shoulder_r": 4, "elbow_r": 70,
|
||||||
|
"shoulder_l": 4, "elbow_l": 70,
|
||||||
|
"hip_l": -12, "knee_l": 55, "ankle_l": -5,
|
||||||
|
"hip_r": 56, "knee_r": 100, "ankle_r": -5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 112 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
|
||||||
|
<title>Running</title>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="grad-leg_l-0" gradientUnits="userSpaceOnUse" x1="164.1" y1="89.5" x2="152.1" y2="118.9"><stop offset="0" stop-color="#4cb3a8"/><stop offset="1" stop-color="#86cfc5"/></linearGradient>
|
||||||
|
<linearGradient id="grad-leg_r-1" gradientUnits="userSpaceOnUse" x1="183.2" y1="111.9" x2="160.5" y2="128.1"><stop offset="0" stop-color="#0d9488"/><stop offset="1" stop-color="#0f9589"/></linearGradient>
|
||||||
|
<linearGradient id="grad-leg_r-2" gradientUnits="userSpaceOnUse" x1="160.5" y1="128.1" x2="164.5" y2="134.6"><stop offset="0" stop-color="#0f9589"/><stop offset="1" stop-color="#27a195"/></linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path d="M 108.5 157.4 L 210.8 157.4 L 210.8 150.2 L 108.5 150.2 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
|
||||||
|
<g id="leg_l">
|
||||||
|
<path d="M 164.1 89.5 L 152.1 118.9" stroke="url(#grad-leg_l-0)" stroke-width="3.66725" stroke-linecap="round"/>
|
||||||
|
<path d="M 152.1 118.9 L 124.8 125.1" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 124.8 125.1 L 125.9 132.6" stroke="#86cfc5" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="arm_l">
|
||||||
|
<path d="M 174.5 31.3 L 172.3 51.9" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
<path d="M 172.3 51.9 L 191.1 61.0" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<g id="leg_r">
|
||||||
|
<path d="M 160.0 89.9 L 183.2 111.9" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 183.2 111.9 L 160.5 128.1" stroke="url(#grad-leg_r-1)" stroke-width="4.19308" stroke-linecap="round"/>
|
||||||
|
<path d="M 160.5 128.1 L 164.5 134.6" stroke="url(#grad-leg_r-2)" stroke-width="4.11689" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<path id="girdle" d="M 174.5 31.3 L 170.3 31.3 L 170.3 32.6" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="pelvisBar" d="M 164.1 89.5 L 160.0 89.0 L 160.0 89.9" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="spine" d="M 160.0 89.0 Q 165.3 59.5 170.3 31.3" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<g id="arm_r">
|
||||||
|
<path d="M 170.3 32.6 L 168.1 53.2" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
<path d="M 168.1 53.2 L 187.0 62.3" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round"/>
|
||||||
|
</g>
|
||||||
|
<circle id="head" cx="173.7" cy="17.9" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
|
||||||
|
<line id="nose" x1="180.7" y1="18.6" x2="185.6" y2="19.1" stroke="#3a3f4b" stroke-width="2.8" stroke-linecap="round"/>
|
||||||
|
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
|
||||||
|
<line x1="224" y1="16" x2="238" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="243" y="20">near</text>
|
||||||
|
<line x1="273" y1="16" x2="287" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<text x="292" y="20">far</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -15,7 +15,7 @@ your own iCloud Drive.
|
|||||||
**Bodyweight Core** circuit with its own warm-up) appear automatically on first
|
**Bodyweight Core** circuit with its own warm-up) appear automatically on first
|
||||||
launch; editing one makes it your own copy, and deleted starters can be restored
|
launch; editing one makes it your own copy, and deleted starters can be restored
|
||||||
from Settings.
|
from Settings.
|
||||||
- **Exercise library** — a bundled library of 65 exercises to populate your
|
- **Exercise library** — a bundled library of 67 exercises to populate your
|
||||||
splits, authored in `Exercise Library/` with per-exercise setup, cues,
|
splits, authored in `Exercise Library/` with per-exercise setup, cues,
|
||||||
mistakes, progressions, and an anatomically-rigged 3D stick-figure visual
|
mistakes, progressions, and an anatomically-rigged 3D stick-figure visual
|
||||||
system — covering every common movement pattern and gym station (see the
|
system — covering every common movement pattern and gym station (see the
|
||||||
|
|||||||
Reference in New Issue
Block a user