Skip to content

Commit da76b7a

Browse files
Remove em dashes from UI copy (#75)
1 parent cf5b3e4 commit da76b7a

7 files changed

Lines changed: 11 additions & 11 deletions

File tree

packages/posecode-language/src/hover.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export function getHover(
7474
if (KINDS.includes(token)) return md(`Movement kind **${token}**.`);
7575
if (POSES.includes(token)) return md(`Start pose **${token}**.`);
7676
if ((MODES as readonly string[]).includes(token)) {
77-
return md(`**${token}** ${KEYWORD_DOCS[token] ?? "timing mode"}`);
77+
return md(`**${token}**: ${KEYWORD_DOCS[token] ?? "timing mode"}`);
7878
}
7979
return null;
8080
}

packages/posecode-language/src/vocab.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ export const KEYWORD_DOCS: Record<string, string> = {
4646
step: 'A movement phase: `step "<name>" <Ns> <mode>:` where mode is flow | settle | drive | snap | linear.',
4747
flow: "Timing mode: pass through this pose with continuous velocity (flowing motion).",
4848
settle: "Timing mode: decelerate to a genuine rest at this pose (a deliberate pause).",
49-
drive: "Timing mode: accelerate from rest the concentric effort of a rep.",
50-
snap: "Timing mode: fast, near-immediate arrival an accent.",
51-
linear: "Timing mode: constant velocity intentionally mechanical.",
49+
drive: "Timing mode: accelerate from rest, like the concentric effort of a rep.",
50+
snap: "Timing mode: fast, near-immediate arrival with an accent.",
51+
linear: "Timing mode: constant velocity; intentionally mechanical.",
5252
repeat: "How many times the movement loops.",
5353
"ground-lock": "Keeps grouped, per-side, or axial contacts on the floor: `feet`, `foot_left` (also `left foot`), `hands`, `forearms`, or `back` for supine work. Planted feet auto-level unless intentionally plantarflexed.",
5454
reach:

playground/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ <h1 class="headline">
152152
</h1>
153153
<p class="subhead">
154154
Turn readable instructions into precise 3D movement. Build exercises,
155-
stretches, dance phrases, and rehab routinesthen edit every beat live in
155+
stretches, dance phrases, and rehab routines, then edit every beat live in
156156
the browser.
157157
</p>
158158
<div class="hero-cta">

playground/play.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121

122122
<div id="intro" class="intro">
123123
<span class="intro-text">
124-
<b>Make something move.</b> Pick a movement or edit the instructionsthe
124+
<b>Make something move.</b> Pick a movement or edit the instructions; the
125125
figure updates as you type.
126126
</span>
127127
<button id="intro-open" class="link">Show me how →</button>

playground/public/spec.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ <h2>5. Rendering model</h2>
215215
<ol><li><strong>Reach-IK</strong>: a <code>reach:</code> line drives an effector (`hand_left|hand_right|</li></ol>
216216
<p>foot_left|foot_right<code>, or the groups </code>hands<code>/</code>feet<code> for both sides) to a world <strong>target</strong> via Cyclic Coordinate Descent (CCD) over the arm/leg chain. A target is a body landmark bone (e.g. </code>ankle_left<code>), the keyword </code>floor<code>, or a prop anchor (</code>bar<code>, </code>seat<code>, </code>wall`). The solve is <strong>ROM-constrained</strong>: each iteration clamps every chain joint into its §4 Range-of-Motion limits (expressed as a per-axis box in the bone's local Euler frame), so a reach toward an unsafe or unreachable target settles on the closest *healthy* pose; solved angles obey the same hard limits as authored ones.</p>
217217
<ol><li><strong>Props</strong>: <code>prop chair|wall|bar|box|dip-bars</code> adds a scene object at a</li></ol>
218-
<p>fixed default placement (chair/wall behind, bar overhead, box in front, dip bars either side); its named anchors (<code>seat</code>, <code>wall</code>, <code>bar</code>, <code>box</code>, <code>bars</code>) become reach/pin targets. Props are <strong>solid</strong>: each prop declares blocking faces (the wall's surface, the chair's backrest and seat edge, the box's near face) and a contact pass removes any body overlap either by translating the whole figure out along the face normal (a wall-sit slides down the wall's *surface*, feet walking forward, instead of the torso hinging through the slab) or by bending the offending limb's hip clear, ROM-clamped like every other solve. Limbs pinned, gripped, or reached to a prop anchor are that phase's declared support and are exempt (a foot standing on the box top is not &quot;inside&quot; the box).</p>
218+
<p>fixed default placement (chair/wall behind, bar overhead, box in front, dip bars either side); its named anchors (<code>seat</code>, <code>wall</code>, <code>bar</code>, <code>box</code>, <code>bars</code>) become reach/pin targets. Props are <strong>solid</strong>: each prop declares blocking faces (the wall's surface, the chair's backrest and seat edge, the box's near face) and a contact pass removes any body overlap: either by translating the whole figure out along the face normal (a wall-sit slides down the wall's *surface*, feet walking forward, instead of the torso hinging through the slab) or by bending the offending limb's hip clear, ROM-clamped like every other solve. Limbs pinned, gripped, or reached to a prop anchor are that phase's declared support and are exempt (a foot standing on the box top is not &quot;inside&quot; the box).</p>
219219
<ol><li><strong>Pins</strong>: <code>pin: &lt;effector&gt; &lt;anchor&gt;</code> translates the whole figure so the</li></ol>
220220
<p>effector sits on the anchor (effectors accept the same <code>hands</code>/<code>feet</code> groups as reach: <code>pin: hands bar</code> pins both). Where ground-lock keeps a foot on the floor and reach moves a limb to a target, a <strong>pin moves the body</strong> while the contact stays put, so the figure hangs from a bar, pulls up toward it, rises onto a box, or lowers into a dip as the joints work. Symmetric bar contacts resolve to side-specific anchors automatically (<code>bar.left</code> / <code>bar.right</code>, <code>bars.left</code> / <code>bars.right</code>). Contact post-processing also keeps floor-contacting soles level and gives bar-contacting wrists a stable overhand orientation; existing Posecode syntax remains unchanged.</p>
221221
<ol><li><strong>Spatial choreography</strong>: <code>turn: &lt;deg&gt;</code> rotates the figure's facing (yaw</li></ol>

spec/SPEC.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ research §5.1 normative tables. Selected ceilings (degrees):
168168
dip bars either side); its named anchors (`seat`, `wall`, `bar`, `box`,
169169
`bars`) become reach/pin targets. Props are **solid**: each prop declares
170170
blocking faces (the wall's surface, the chair's backrest and seat edge,
171-
the box's near face) and a contact pass removes any body overlap either
171+
the box's near face) and a contact pass removes any body overlap: either
172172
by translating the whole figure out along the face normal (a wall-sit
173173
slides down the wall's *surface*, feet walking forward, instead of the
174174
torso hinging through the slab) or by bending the offending limb's hip

video/cut2/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ const Result = () => {
197197
</div>
198198
<div style={{position: 'absolute', left: 'calc(50% - 30px)', top: 290, width: 60, height: 60, borderRadius: 60, background: C.lime, color: C.ink, display: 'grid', placeItems: 'center', fontSize: 31, fontWeight: 900, boxShadow: '0 0 30px rgba(198,242,74,.5)', transform: `scale(${split})`}}></div>
199199
</div>
200-
<Caption keyword="renders">It renders — safe, 60fps.</Caption>
200+
<Caption keyword="renders">It renders safely at 60fps.</Caption>
201201
</AbsoluteFill>;
202202
};
203203

@@ -212,7 +212,7 @@ const Mcp = () => {
212212
];
213213
return <AbsoluteFill style={{opacity: fade(frame, BEAT)}}>
214214
<div style={{position: 'absolute', top: 195, left: 135, right: 135, display: 'grid', gridTemplateColumns: '1.25fr .75fr', gap: 24, transform: `translateY(${rise(frame)}px)`}}>
215-
<Window title="terminal posecode-mcp">
215+
<Window title="terminal: posecode-mcp">
216216
<div style={{height: 560, padding: '42px 42px', boxSizing: 'border-box', fontFamily: 'JetBrains Mono, monospace'}}>
217217
{entries.map(([a,b], i) => <div key={a} style={{display: 'flex', justifyContent: 'space-between', fontSize: i === 0 ? 25 : 20, lineHeight: 2.35, opacity: interpolate(frame, [i * 14, i * 14 + 8], [0, 1], clamp), color: i === 0 ? C.white : i === 1 ? C.lime : '#d2dae6'}}><span>{a}</span><span style={{color: i > 1 ? C.lime : C.muted}}>{b}</span></div>)}
218218
</div>
@@ -336,7 +336,7 @@ const VerticalCut2 = () => {
336336
<div style={{position: 'absolute', right: 48, top: 330, background: C.lime, color: C.ink, fontFamily: 'JetBrains Mono, monospace', fontWeight: 800, borderRadius: 999, padding: '13px 18px'}}>60 FPS</div>
337337
</div>}
338338
{beat === 4 && <div style={sceneStyle}>
339-
<div style={{position: 'absolute', top: 285, left: 48, right: 48}}><VCard title="terminal posecode-mcp"><div style={{height: 920, padding: '48px 38px', fontFamily: 'JetBrains Mono, monospace', fontSize: 25, lineHeight: 2.4}}><div style={{fontSize: 30, color: C.white}}>$ npx posecode-mcp</div><div style={{color: C.lime}}>● connected</div><div>→ authoring_guide <span style={{float: 'right', color: C.lime}}></span></div><div>→ validate_posecode <span style={{float: 'right', color: C.lime}}>safe ✓</span></div><div>→ render_posecode <span style={{float: 'right', color: C.lime}}>ready ✓</span></div><div style={{height: 330, marginTop: 30, borderRadius: 22, border: `1px solid ${C.line}`}}><MoveVideo src="squat.mp4" style={{height: '100%', borderRadius: 22}} /></div></div></VCard></div>
339+
<div style={{position: 'absolute', top: 285, left: 48, right: 48}}><VCard title="terminal: posecode-mcp"><div style={{height: 920, padding: '48px 38px', fontFamily: 'JetBrains Mono, monospace', fontSize: 25, lineHeight: 2.4}}><div style={{fontSize: 30, color: C.white}}>$ npx posecode-mcp</div><div style={{color: C.lime}}>● connected</div><div>→ authoring_guide <span style={{float: 'right', color: C.lime}}></span></div><div>→ validate_posecode <span style={{float: 'right', color: C.lime}}>safe ✓</span></div><div>→ render_posecode <span style={{float: 'right', color: C.lime}}>ready ✓</span></div><div style={{height: 330, marginTop: 30, borderRadius: 22, border: `1px solid ${C.line}`}}><MoveVideo src="squat.mp4" style={{height: '100%', borderRadius: 22}} /></div></div></VCard></div>
340340
</div>}
341341
{beat === 5 && <div style={sceneStyle}>
342342
<div style={{position: 'absolute', top: 255, left: 42, right: 42}}><VCard title="demo.html"><div style={{height: 1050, padding: '45px 35px', boxSizing: 'border-box', fontFamily: 'JetBrains Mono, monospace', fontSize: 23, lineHeight: 1.7}}><div style={{color: '#8fd7ff'}}>&lt;script</div><div style={{paddingLeft: 24}}><span style={{color: C.lime}}>src</span>=<span style={{color: '#ffd38f'}}>"https://unpkg.com/</span></div><div style={{paddingLeft: 24, color: '#ffd38f'}}>posecode-embed/dist/</div><div style={{paddingLeft: 24, color: '#ffd38f'}}>posecode-embed.js"</div><div style={{color: '#8fd7ff'}}>&gt;&lt;/script&gt;</div><div style={{height: 34}}/><div style={{color: '#8fd7ff'}}>&lt;posecode-player</div><div style={{paddingLeft: 24}}><span style={{color: C.lime}}>src</span>=<span style={{color: '#ffd38f'}}>"/movements/</span></div><div style={{paddingLeft: 24, color: '#ffd38f'}}>squat.posecode"</div><div style={{color: '#8fd7ff'}}>&gt;&lt;/posecode-player&gt;</div><div style={{height: 360, marginTop: 30, border: `1px solid ${C.line}`, borderRadius: 22}}><MoveVideo src="squat.mp4" style={{height: '100%', borderRadius: 22}} /></div></div></VCard></div>

0 commit comments

Comments
 (0)