stylegallery 0.1.3 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/DOMAINS.md +13 -9
- package/GOVERNANCE.md +9 -1
- package/README.md +26 -5
- package/consumer-reference/agent-native/README.md +12 -1
- package/consumer-reference/agent-native/v2/admission-policy.json +176 -1
- package/consumer-reference/agent-native/v2/material-registry.json +1 -1
- package/consumer-reference/agent-native/v2/schema/admission-policy.schema.json +3 -3
- package/consumer-reference/agent-native/v2/schema/material-record.schema.json +1 -1
- package/design-engineering/component-contract.md +98 -0
- package/design-engineering/consumer-migration-readiness.md +124 -0
- package/design-engineering/decision-tree.md +69 -0
- package/design-engineering/index.md +12 -2
- package/design-engineering/interface-craft.md +107 -0
- package/design-engineering/worked-examples.md +127 -0
- package/design-terminology/comparison-workflow.md +98 -0
- package/design-terminology/concept-families.md +78 -0
- package/design-terminology/conflict-cases.md +109 -0
- package/design-terminology/index.md +73 -0
- package/design-terminology/relation-types.md +109 -0
- package/design-terminology/source-kinds.md +77 -0
- package/design-terminology/source-vocabularies.md +93 -0
- package/game-ui/classification.md +82 -0
- package/game-ui/decision-tree.md +81 -0
- package/game-ui/index.md +11 -1
- package/game-ui/reference-record.md +62 -0
- package/game-ui/screen-hierarchy.md +107 -0
- package/game-ui/screen-recipes.md +101 -0
- package/game-ui/unity/architecture.md +166 -0
- package/game-ui/unity/cli-loop.md +84 -0
- package/game-ui/unity/org-wiki.md +146 -0
- package/game-ui/unity/repository-map.md +102 -0
- package/game-ui/unity/ui-systems.md +85 -0
- package/game-ui/verification-workflow.md +100 -0
- package/guides/vocabulary.md +1 -1
- package/index.md +10 -1
- package/log.md +43 -0
- package/motion/decision-tree.md +70 -0
- package/motion/index.md +14 -2
- package/motion/interaction-recipes.md +164 -0
- package/motion/motion-brief.md +125 -0
- package/motion/practice-reference.md +145 -0
- package/motion/review-workflow.md +94 -0
- package/motion/vocabulary.md +82 -0
- package/package.json +36 -1
- package/platform-guides/adaptation-workflow.md +76 -0
- package/platform-guides/android-interaction.md +74 -0
- package/platform-guides/apple-interaction.md +97 -0
- package/platform-guides/compatibility-matrix.md +97 -0
- package/platform-guides/index.md +13 -2
- package/platform-guides/windows-interaction.md +75 -0
- package/quality/claim-records/design-terminology-domain-scope.md +57 -0
- package/quality/evidence/executable-evidence.md +1 -1
- package/quality/index.md +2 -2
- package/recipes/homepage.md +8 -0
- package/scripts/agent-native/v2/material-admission.mjs +1 -1
- package/scripts/agent-native/v2/material-identity.mjs +2 -2
- package/scripts/agent-native/v2/material-mcp-adapter.mjs +1 -1
- package/scripts/agent-native/v2/material-queries.mjs +60 -12
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Domain Guide
|
|
3
|
+
title: Motion Decision Tree
|
|
4
|
+
description: Choose a motion responsibility from a user task, state change, and failure case.
|
|
5
|
+
domain: motion
|
|
6
|
+
lifecycle: experimental
|
|
7
|
+
provenance_kind: local
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Motion Decision Tree
|
|
11
|
+
|
|
12
|
+
Primary role: motion selection workflow.
|
|
13
|
+
|
|
14
|
+
## Repository Boundary
|
|
15
|
+
|
|
16
|
+
Use this route to decide whether a product interaction needs motion and which behavior contract to write. Layout continues to own final geometry, semantic order, and scrolling. This route selects a responsibility, not a timing preset.
|
|
17
|
+
|
|
18
|
+
## Reusable Method
|
|
19
|
+
|
|
20
|
+
1. Write the before and after state without animation. If either is unusable, fix that state first.
|
|
21
|
+
2. Name the information motion would add: acknowledgement, continuity, progress, or guidance. If none is needed, use an immediate update.
|
|
22
|
+
3. Choose the first matching responsibility below; compose only when one transition has multiple explicit jobs.
|
|
23
|
+
4. Complete the [Motion Brief](motion-brief.md), including interruption and a reduced-motion path.
|
|
24
|
+
5. Use an [Interaction Recipe](interaction-recipes.md) and verify through the [Review Workflow](review-workflow.md).
|
|
25
|
+
|
|
26
|
+
## Selection Table
|
|
27
|
+
|
|
28
|
+
| Observed task | Choose | Failure to prevent | First verification |
|
|
29
|
+
| --- | --- | --- | --- |
|
|
30
|
+
| Explain an already rendered effect | [Vocabulary](vocabulary.md) | Inferring an API from appearance | Exact, ambiguous, and unknown observations |
|
|
31
|
+
| Acknowledge a command | [Action feedback](interaction-recipes.md#action-feedback) | Decorative feedback mistaken for successful completion | Pending, success, failure, repeated activation |
|
|
32
|
+
| Show or hide supporting content | [Disclosure](interaction-recipes.md#disclosure) | Hidden content retaining focus or delayed access to content | Keyboard activation and reversal |
|
|
33
|
+
| Enter or dismiss a modal task | [Modal transition](interaction-recipes.md#modal-transition) | Focus or input blocking tied to an animation timer | Focus entry, cancellation, return |
|
|
34
|
+
| Preserve identity when items move | [Reorder and filter](interaction-recipes.md#reorder-and-filter) | Visual movement changing logical reading order | Stable identity and focused-item removal |
|
|
35
|
+
| Explain an operation that takes time | [Progress and completion](interaction-recipes.md#progress-and-completion) | An invented percentage or success before confirmation | Delayed result, cancellation, failure |
|
|
36
|
+
| Follow direct manipulation | [Drag and settle](interaction-recipes.md#drag-and-settle) | A cancelled gesture committing data | Release, reversal, cancellation, alternative input |
|
|
37
|
+
| Explore a product through scroll-controlled chapters | [Scroll-driven story](interaction-recipes.md#scroll-driven-story) | Entry callbacks mistaken for continuous progress; inaccessible pinned content | Reverse, jump, middle reload, static reading |
|
|
38
|
+
| Navigate a whole page as fixed-viewport scenes | [Full-viewport scene navigation](interaction-recipes.md#full-viewport-scene-navigation) | Gesture bursts skipping chapters; trapped input or lost history | Burst, boundary, direct link, Back, Escape, native copy scroll |
|
|
39
|
+
| Decorate an idle surface | [Practice Reference](practice-reference.md) | Repetition competing with the user's task | Compare against removal and reduced motion |
|
|
40
|
+
|
|
41
|
+
## Worked Selection
|
|
42
|
+
|
|
43
|
+
A search result list changes after a filter selection. The task is to understand which results remain; it is not to watch every row arrive. Choose reorder/filter only if stable result identities can be preserved. Keep the filter control focused. Announce the resulting count separately from any visual interpolation. When no results remain, present an actionable empty state immediately. If identity cannot be mapped reliably, replace the list without implying continuity.
|
|
44
|
+
|
|
45
|
+
The decision record is a proposal until tested on the consuming product. It does not establish that motion improves search comprehension.
|
|
46
|
+
|
|
47
|
+
## Opinionated Guidance
|
|
48
|
+
|
|
49
|
+
Prefer one explanatory event over a sequence of unrelated effects. Evaluate high-frequency interactions with realistic repetition; a first-use recording can hide accumulated cost.
|
|
50
|
+
|
|
51
|
+
## Platform-Specific Guidance
|
|
52
|
+
|
|
53
|
+
Choose implementation APIs only after the behavior contract. Native gestures, browser navigation, scroll timelines, and animation libraries have different cancellation and lifetime behavior. Platform adaptation starts at [Platform Guides](../platform-guides/index.md).
|
|
54
|
+
|
|
55
|
+
## Unsupported Absolutes
|
|
56
|
+
|
|
57
|
+
An immediate update is a valid outcome. A recipe name does not imply a spring, compositor execution, fixed duration, or proven usability improvement.
|
|
58
|
+
|
|
59
|
+
## Verification Contract
|
|
60
|
+
|
|
61
|
+
For the selected row, verify normal completion, interruption, repeated input, the reduced-motion path, and a failed or empty result where relevant. Record the actual outcome separately from the expected outcome. Revisit this route when a task cannot find a suitable contract or two recipes imply conflicting ownership.
|
|
62
|
+
|
|
63
|
+
## Source, License, And Attribution
|
|
64
|
+
|
|
65
|
+
Locally authored selection workflow based on this domain's existing vocabulary and review contracts. No external code or expressive examples are adapted.
|
|
66
|
+
|
|
67
|
+
## IA Navigation
|
|
68
|
+
|
|
69
|
+
Parent: [Motion](index.md).
|
|
70
|
+
Next: [Motion Brief](motion-brief.md).
|
package/motion/index.md
CHANGED
|
@@ -8,6 +8,18 @@ In scope: naming observable motion, reviewing declared behavior, distinguishing
|
|
|
8
8
|
|
|
9
9
|
Out of scope: universal timing or easing rules, unmeasured performance claims, and permission to add animation or decorative properties to reusable Layout pattern CSS.
|
|
10
10
|
|
|
11
|
+
## Start Here
|
|
12
|
+
|
|
13
|
+
| Task | Route |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| Choose a behavior from the user task. | [Motion Decision Tree](decision-tree.md) |
|
|
16
|
+
| Record states, owners, interruption, and evidence. | [Motion Brief](motion-brief.md) |
|
|
17
|
+
| Build a scroll-driven product story and inspect runnable examples. | [Scroll-driven Story](interaction-recipes.md#scroll-driven-story) and [Scroll Story Lab](../examples/scroll-story/README.md) |
|
|
18
|
+
| Keep the page fixed while navigating between full-screen chapters. | [Full-viewport Scene Navigation](interaction-recipes.md#full-viewport-scene-navigation) and [runnable example](../examples/scene-navigation/README.md) |
|
|
19
|
+
| Apply feedback, disclosure, modal, reorder, progress, and drag contracts. | [Motion Interaction Recipes](interaction-recipes.md) |
|
|
20
|
+
|
|
21
|
+
These workflows and worked cases are usable experimental guidance. Expected-result tables are test designs; actual product, engine, and reader evidence must be recorded separately. Review on a failed task, a source change, or a changed ownership contract.
|
|
22
|
+
|
|
11
23
|
## Documents
|
|
12
24
|
|
|
13
25
|
- [Motion Vocabulary](vocabulary.md) maps observed behavior to implementation-neutral terms while preserving ambiguity.
|
|
@@ -16,9 +28,9 @@ Out of scope: universal timing or easing rules, unmeasured performance claims, a
|
|
|
16
28
|
|
|
17
29
|
## Domain Contract
|
|
18
30
|
|
|
19
|
-
See [StyleGallery Domains](../DOMAINS.md) for lifecycle, provenance, page membership, and
|
|
31
|
+
See [StyleGallery Domains](../DOMAINS.md) for lifecycle, provenance, page membership, and staleness rules.
|
|
20
32
|
|
|
21
33
|
## IA Navigation
|
|
22
34
|
|
|
23
35
|
Parent: [StyleGallery](../index.md).
|
|
24
|
-
Next: [Motion
|
|
36
|
+
Next: [Motion Decision Tree](decision-tree.md).
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Domain Guide
|
|
3
|
+
title: Motion Interaction Recipes
|
|
4
|
+
description: State-based product motion recipes for feedback, disclosure, modal transitions, rearrangement, progress, and dragging.
|
|
5
|
+
domain: motion
|
|
6
|
+
lifecycle: experimental
|
|
7
|
+
provenance_kind: local
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Motion Interaction Recipes
|
|
11
|
+
|
|
12
|
+
Primary role: motion behavior catalog.
|
|
13
|
+
|
|
14
|
+
## Repository Boundary
|
|
15
|
+
|
|
16
|
+
These recipes describe product behavior and failure cases. They compose with Layout instead of supplying reusable spatial CSS or visual defaults. Start with a [Motion Brief](motion-brief.md); use [Vocabulary](vocabulary.md) for the visual effect's name.
|
|
17
|
+
|
|
18
|
+
## Reusable Method
|
|
19
|
+
|
|
20
|
+
Choose the task below, assign semantic and presentation owners, implement the immediate state change first, and then test any visual interpolation against that baseline. The traces below are expected behavior, not evidence of a tested implementation.
|
|
21
|
+
|
|
22
|
+
### Action Feedback
|
|
23
|
+
|
|
24
|
+
Use for a command whose acknowledgement and completion are different events.
|
|
25
|
+
|
|
26
|
+
`ready → pending → success | error`; a retry is a new request. Press feedback may acknowledge input immediately, but a success treatment waits for actual confirmation. Decide explicitly whether repeated activation is ignored, queued, or replaces the request. Keep essential status available without motion. Test delayed completion, duplicate input, failure, and a response arriving after navigation.
|
|
27
|
+
|
|
28
|
+
### Disclosure
|
|
29
|
+
|
|
30
|
+
Use for optional content controlled by a nearby trigger. A native `details`/`summary` baseline can be enough:
|
|
31
|
+
|
|
32
|
+
```html
|
|
33
|
+
<details>
|
|
34
|
+
<summary>Delivery restrictions</summary>
|
|
35
|
+
<p>Some destinations need an additional delivery day.</p>
|
|
36
|
+
</details>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If a custom disclosure is necessary, keep the trigger's expanded state consistent with content availability. The [APG disclosure contract](https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/) describes button activation and state semantics. When closing while focus is inside, move focus to an available logical target before hiding it. Test repeated toggle, long content, and removal of the trigger. Avoid fixed maximum heights that clip real content; Layout owns intrinsic sizing.
|
|
40
|
+
|
|
41
|
+
### Modal Transition
|
|
42
|
+
|
|
43
|
+
Use when a temporary task must block the surrounding interface. Assign one owner to opening, focus placement, blocking, cancellation, and focus return. An entrance effect may decorate this change; semantic availability must not wait for an arbitrary timeout. If exit animation is retained, define whether the dialog remains modal until cleanup and how reopening supersedes a pending close.
|
|
44
|
+
|
|
45
|
+
The [APG modal dialog guidance](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/) supplies the web interaction baseline. Test close during entry, reopen during exit, nested overlays, trigger removal, and reduced motion. After final close there must be no surviving blocker or focus trap.
|
|
46
|
+
|
|
47
|
+
### Reorder And Filter
|
|
48
|
+
|
|
49
|
+
Use when the same identifiable items move or are removed. Commit the intended logical order, retain stable item keys, and interpolate presentation only where the source/destination mapping is valid. Preserve focused items; if one disappears, choose a documented neighboring item or controlling filter. Do not reorder DOM solely to produce a pleasing stagger.
|
|
50
|
+
|
|
51
|
+
Trace: filter A → filter B → late A data → B remains current. Test empty results, long item labels, list updates during movement, keyboard navigation, and a focused item's removal. An immediate redraw is the fallback when continuity cannot be established.
|
|
52
|
+
|
|
53
|
+
### Progress And Completion
|
|
54
|
+
|
|
55
|
+
Use when an ongoing operation needs visible status. Show determinate progress only when backed by a meaningful measurement; otherwise use a pending state. Completion, failure, and cancellation come from the operation, independently of the progress decoration.
|
|
56
|
+
|
|
57
|
+
Trace: pending → cancellation requested → confirmed cancelled or completed; do not promise cancellation succeeded before the operation confirms it. Essential information persists beyond a transient flourish. Use urgent alerts sparingly; [APG alert guidance](https://www.w3.org/WAI/ARIA/apg/patterns/alert/) distinguishes announcements from focus-taking dialogs.
|
|
58
|
+
|
|
59
|
+
### Drag And Settle
|
|
60
|
+
|
|
61
|
+
Use when direct manipulation previews a change before commitment. Separate the preview value from the committed value. Release on a valid target commits; cancellation restores or reconciles with the current model. A new gesture retargets from the presented position where continuity is intended. Provide a task-equivalent non-drag operation.
|
|
62
|
+
|
|
63
|
+
Test release inside/outside, cancellation, pointer loss, a changing destination, and repeated reversal. Focus and the selected item must remain traceable while visual position changes. The engine or browser adapter owns gesture events; the product owns acceptance of the new value.
|
|
64
|
+
|
|
65
|
+
### Scroll-Driven Story
|
|
66
|
+
|
|
67
|
+
Use when a visitor explores a product through ordered visual chapters: scroll a phone into view, enlarge the device, change its screen, then release the scene into the next section. The story is presentation; scrolling must not commit a payment or other application action.
|
|
68
|
+
|
|
69
|
+
| Responsibility | Contract | Failure to exercise |
|
|
70
|
+
| --- | --- | --- |
|
|
71
|
+
| Scroll reveal | Entry triggers a time-based effect; declare once or replay | Re-enter, preference change, content hidden before script starts |
|
|
72
|
+
| Scroll scrub | Position continuously determines a bounded progress value | Reverse, jump over a segment, load at the middle |
|
|
73
|
+
| Pinned story | Document scroll advances a locally sticky stage | Short viewport, long copy, wrong ancestor overflow, release boundary |
|
|
74
|
+
| Layered parallax | Each decorative layer maps progress to a bounded displacement | Cropping, text overlap, reduced-motion alternative |
|
|
75
|
+
| Media sequence | Progress requests an image frame or media time | Slow decode, stale completion, missing frame, unavailable media |
|
|
76
|
+
|
|
77
|
+
The [Scroll Story Lab](../examples/scroll-story/README.md) links runnable Flow and headphones examples, a native CSS scrub, source files, and observed verification. It implements scrub, pinning, scene crossfades, and a small image sequence. Parallax and video seeking remain contracts rather than claimed executed examples.
|
|
78
|
+
|
|
79
|
+
#### Scene Composition Contract
|
|
80
|
+
|
|
81
|
+
Layout owns document scroll, the containing block, sticky offset, available stage height, and track distance. Motion owns progress, scene ranges, continuity, and teardown. The consuming product owns imagery, typography, colors, and visual values. First compose `stack`, `content-limiter`, and `overlay-stack` responsibilities with local sticky positioning; a new Layout pattern requires a distinct demonstrated spatial failure.
|
|
82
|
+
|
|
83
|
+
Record `start`, `distance`, `scene_ranges`, `resize_policy`, `direct_entry`, `static_path`, and `media_budget` alongside the [Motion Brief](motion-brief.md). For positive distance, clamp `(scroll_position - start) / distance` to `[0, 1]`; a nonpositive distance selects the static path. Derive the entire scene from current progress, not from which callbacks have already fired. This makes reversal and skipped segments well defined.
|
|
84
|
+
|
|
85
|
+
The worked three-scene example centers chapters at progress 0, 0.5, and 1. Copy crossfades between centers while decorative scale and position interpolate. These values are local choices, not universal timing or easing defaults. No wheel interception or artificial scroll smoothing is needed for the example.
|
|
86
|
+
|
|
87
|
+
#### Implementation And Fallback
|
|
88
|
+
|
|
89
|
+
Choose the smallest rendering mechanism that meets the contract. CSS scroll/view timelines suit declarative interpolation; a scheduled JavaScript renderer can coordinate semantic availability and decoded media. Feature detection only chooses an implementation candidate, not a supported-device claim. The lab demonstrates CSS continuous rotation separately from its JavaScript three-scene controller; it does not claim visual parity between them.
|
|
90
|
+
|
|
91
|
+
Keep all chapters in ordinary semantic HTML before enhancement. In animated mode, only the presented chapter is available to interaction and accessibility APIs; a visible reading-mode control exposes every chapter in order. Provide a skip link outside the changing panels. Do not put essential actions only inside a fading chapter. Narrow or low windows, overflowing copy, no script, and reduced motion must retain a readable path. React to preference changes during use.
|
|
92
|
+
|
|
93
|
+
Cache geometry on layout changes, batch scroll updates, and avoid a perpetual idle animation loop. Recompute on resize, delayed fonts/images, and history restoration. Dispose observers, queued frames, and stale media callbacks on removal. A restored page must recompute from its restored position.
|
|
94
|
+
|
|
95
|
+
#### Media Contract
|
|
96
|
+
|
|
97
|
+
Record frame order, dimensions, poster, compression, source/license, decoded-memory estimate, cache limit, concurrent decode limit, timeout, and fallback. A successful older decode must never replace a newer requested frame. Retain a poster or last good frame while loading or after failure. Keep essential text outside the image. For video, additionally define duration readiness, seek granularity, pending-seek replacement, and seek failure; selecting `currentTime` is not proof of frame-accurate delivery.
|
|
98
|
+
|
|
99
|
+
The lab uses twelve locally drawn 480×480 SVG illustrations, one in-flight decode, three cached frames, and an eight-second example timeout. These low-detail illustrations verify the loading lifecycle, not photographic quality or production video performance.
|
|
100
|
+
|
|
101
|
+
#### Verification Trace
|
|
102
|
+
|
|
103
|
+
Exercise `0 → 0.5 → 1 → 0.5 → 0`, direct entry at 0.5, and jumps across both scene boundaries. Compare presented state at the same progress in both directions. Also exercise resize mid-scene, text growth, image failure, a slow obsolete request, idle updates, reading-mode activation, preference changes, and teardown. Record browser and OS separately from emulated viewport/input. A screenshot proves one state; performance and perceptual continuity need separate evidence.
|
|
104
|
+
|
|
105
|
+
Technical sources rechecked on 2026-09-09: [W3C Scroll-driven Animations draft](https://www.w3.org/TR/scroll-animations-1/), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame), and [image decode](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/decode). These support the API distinctions and decode lifecycle; they do not establish local frame rate, comfort, or adoption.
|
|
106
|
+
|
|
107
|
+
### Full-Viewport Scene Navigation
|
|
108
|
+
|
|
109
|
+
Task: explore a short sequence as screen transitions while the document stays at one position. This is discrete navigation driven by input, not a scroll-position timeline. Use the [Scene Navigation example](../examples/scene-navigation/README.md) for a runnable contract.
|
|
110
|
+
|
|
111
|
+
| Model | State source | Scroll responsibility |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| Pinned scrub | Continuous document position | Document traverses a track; the local stage sticks and releases |
|
|
114
|
+
| Native snapping | Browser scroll position and snap targets | Document or named pane scrolls between real positions |
|
|
115
|
+
| Fixed-viewport scenes | Selected chapter identity | Document stays fixed in scene mode; overflowing copy owns native scrolling |
|
|
116
|
+
|
|
117
|
+
Choose explicitly; similar appearance does not make their input, history, or recovery behavior equivalent. A short showcase may justify scene navigation. Articles, search results, forms, and long task flows should retain ordinary reading and scrolling unless a tested task requires otherwise.
|
|
118
|
+
|
|
119
|
+
#### Input And Navigation Contract
|
|
120
|
+
|
|
121
|
+
One controller owns the selected chapter. Commit that state immediately and let product CSS retarget presentation; never wait for an animation timer before accepting navigation. Keep the same decorative subject node across scenes when object continuity is intended.
|
|
122
|
+
|
|
123
|
+
- Declare the input surface. The example owns vertical wheel gestures only within its stage and touch swipes only over its decorative art; visible chapter and previous/next controls remain available.
|
|
124
|
+
- Aggregate small wheel deltas and accept at most one navigation per burst. Declare threshold, unit conversion, silence interval, reversal, and edge behavior as local choices. Test long momentum tails on actual target hardware before claiming trackpad support.
|
|
125
|
+
- Exempt editable controls, native overflowing copy, modifier gestures, and horizontal scrolling. Do not capture Tab, browser history shortcuts, or pinch zoom. Do not auto-advance from a copy pane when its scroll reaches the edge.
|
|
126
|
+
- Support direct chapter links, keyboard commands, Back/Forward restoration, and invalid-fragment fallback. Do not loop at the first or last chapter. Preserve unrelated URL state.
|
|
127
|
+
- Make only the selected panel interactive in scene mode. If focus was inside the outgoing panel, move it to the incoming heading; otherwise retain control focus. Announce the chapter separately from animation.
|
|
128
|
+
- Provide a persistent reading-mode control and an escape command. All chapters remain ordinary semantic HTML with no script. A short viewport selects reading mode; long copy remains a named native scroll region.
|
|
129
|
+
- Reduced motion may preserve discrete navigation while making transitions immediate. State this separately from the pinned example's static fallback, and react to preference changes during use.
|
|
130
|
+
|
|
131
|
+
The example's 60-pixel aggregate threshold, 180-millisecond silence interval, 55-pixel swipe threshold, and 540-pixel minimum height are product experiments. They are not gallery-wide defaults or measured usability recommendations.
|
|
132
|
+
|
|
133
|
+
#### Verification Trace
|
|
134
|
+
|
|
135
|
+
Record `0 → 1 → 2 → 1 → 0` with document position unchanged, a long wheel burst, fresh reverse gesture, rapid opposite commands, boundary commands, direct entry, Back/Forward, and Escape. Exercise long copy and text editing without changing chapters, cancelled/multi-touch gestures, no script, reduced motion, resize, and teardown. Desktop touch emulation does not establish iOS Safari, Android, physical trackpad, or assistive-technology behavior.
|
|
136
|
+
|
|
137
|
+
Locally authored interaction contract. The worked example's verification is bounded to its recorded source and runtime; no external homepage implementation is inferred from its appearance.
|
|
138
|
+
|
|
139
|
+
## Opinionated Guidance
|
|
140
|
+
|
|
141
|
+
For frequent operations, compare with removing motion before increasing its complexity. When two recipes compose, one controller must arbitrate the shared state rather than letting competing completion callbacks decide it.
|
|
142
|
+
|
|
143
|
+
## Platform-Specific Guidance
|
|
144
|
+
|
|
145
|
+
For the web, [`prefers-reduced-motion`](https://www.w3.org/TR/mediaqueries-5/#prefers-reduced-motion) is a preference signal. Define the alternative per recipe and respond to preference changes during use. API support, native gesture physics, and rendering performance require the exact target runtime.
|
|
146
|
+
|
|
147
|
+
## Unsupported Absolutes
|
|
148
|
+
|
|
149
|
+
These recipes establish no universal duration, spring configuration, frame rate, device coverage, or aesthetic result. A static snippet does not prove animated or assistive-technology behavior.
|
|
150
|
+
|
|
151
|
+
## Verification Contract
|
|
152
|
+
|
|
153
|
+
For each implemented recipe record before, intermediate, interrupted, and final states; logical order and focus; reduced-motion behavior; and completion/error cleanup. Source inspection can check declared ownership. Rendered interaction and assistive-technology behavior require the consuming application. Review when an API changes or a trace fails.
|
|
154
|
+
|
|
155
|
+
The [Interaction Lab](../examples/domain-interactions/README.md) provides a bounded web implementation of feedback, native disclosure, modal dismissal, stale search results, reward reveal, and range-input preview. Its [verification notes](../examples/domain-interactions/verification.md) record exercised states and preferences; they do not establish coverage for every possible implementation of these recipes.
|
|
156
|
+
|
|
157
|
+
## Source, License, And Attribution
|
|
158
|
+
|
|
159
|
+
Locally authored recipes and HTML. The linked W3C APG pages and Media Queries Level 5 were rechecked on 2026-09-08 for the specific semantics and preference signal above. No upstream examples or timing prescriptions are copied.
|
|
160
|
+
|
|
161
|
+
## IA Navigation
|
|
162
|
+
|
|
163
|
+
Parent: [Motion](index.md).
|
|
164
|
+
Next: [Motion Review Workflow](review-workflow.md).
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Domain Guide
|
|
3
|
+
title: Motion Brief
|
|
4
|
+
description: Author a product-owned transition contract with interruption, preference, and evidence requirements.
|
|
5
|
+
domain: motion
|
|
6
|
+
lifecycle: experimental
|
|
7
|
+
provenance_kind: local
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Motion Brief
|
|
11
|
+
|
|
12
|
+
Primary role: motion implementation handoff template.
|
|
13
|
+
|
|
14
|
+
## Repository Boundary
|
|
15
|
+
|
|
16
|
+
This brief records one product-owned behavior. Its timings, distances, and treatments never become reusable Layout values. Use the [Decision Tree](decision-tree.md) before filling it in.
|
|
17
|
+
|
|
18
|
+
## Reusable Method
|
|
19
|
+
|
|
20
|
+
Complete every field, using `unknown` for missing observations and a reason for non-applicability. A blank field is not an accepted exception.
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
interaction: # a user action and the state it changes
|
|
24
|
+
purpose: # the information motion adds
|
|
25
|
+
frequency: # observed or estimated, with its basis
|
|
26
|
+
trigger: # input, data event, navigation, or scroll progress
|
|
27
|
+
semantic_owner: # who commits the real application state
|
|
28
|
+
presentation_owner: # who starts, retargets, cancels, and disposes motion
|
|
29
|
+
layout_owner: # final geometry and scroll responsibility
|
|
30
|
+
states: # initial, in-flight, completed, failed, cancelled
|
|
31
|
+
identity: # stable object or item key, if continuity is claimed
|
|
32
|
+
parameters: # product-local values and why they are being tried
|
|
33
|
+
interruption: # reverse, retarget, finish, or cancel, and from which state
|
|
34
|
+
focus_and_input: # entry, availability during motion, exit, fallback target
|
|
35
|
+
reduced_motion: # equivalent state/feedback without unnecessary movement
|
|
36
|
+
teardown: # navigation, removal, preference change, and stale callbacks
|
|
37
|
+
verification: # exact actions, expected outcomes, runtime and artifacts
|
|
38
|
+
observed_result: # not_run until evidence exists
|
|
39
|
+
boundary: # what those observations cannot establish
|
|
40
|
+
review_trigger: # source/API change, a failed case, or reader task
|
|
41
|
+
consumer_reference: not_applicable
|
|
42
|
+
consumer_reference_reason: This blank template selects no consumer reference record.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Filled Example: Search Status Feedback
|
|
46
|
+
|
|
47
|
+
| Field | Example decision |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| Interaction and purpose | Submit a search; distinguish waiting, zero results, results, and failure |
|
|
50
|
+
| Frequency | Unknown; measure in the consuming search task |
|
|
51
|
+
| Semantic owner | Search controller; only the active request may replace results |
|
|
52
|
+
| Presentation owner | Status component; progress decoration may stop independently |
|
|
53
|
+
| Layout owner | Consumer's result region; [Feed](../patterns/stacking/feed.md) can own vertical repetition |
|
|
54
|
+
| Transition | Idle → pending → results/empty/error; a new query supersedes the old request |
|
|
55
|
+
| Parameters | No movement needed for the baseline; a loading treatment is an optional later hypothesis |
|
|
56
|
+
| Interruption | Query B supersedes query A; A's late completion is ignored |
|
|
57
|
+
| Focus | Remains on the initiating control unless the user moves it |
|
|
58
|
+
| Reduced motion | Static pending text and the same final result or error |
|
|
59
|
+
| Teardown | Abort where supported and reject stale completion by request identity |
|
|
60
|
+
| Verification | Submit A, submit B, resolve B, then resolve A; B remains presented |
|
|
61
|
+
| Observed result | `not_run`: illustrative contract, not captured product evidence |
|
|
62
|
+
| Review trigger | The product changes its request lifecycle, navigation, or status announcement |
|
|
63
|
+
|
|
64
|
+
Example handoff: `consumer_reference: not_applicable` because no profile or consumer evidence record is selected. A real consumer replaces this with its applicable repository-relative record or its own reason.
|
|
65
|
+
|
|
66
|
+
## Scroll Story Extension
|
|
67
|
+
|
|
68
|
+
For scroll-linked scenes, fill these fields in addition to the general brief:
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
scroll_owner: document
|
|
72
|
+
stage_owner: # sticky containing block and offset
|
|
73
|
+
start_and_distance: # measured start, positive distance, zero-distance alternative
|
|
74
|
+
scene_ranges: # each chapter's entry, hold, exit, and semantic availability
|
|
75
|
+
resize_policy: # recompute geometry and fall back when content cannot fit
|
|
76
|
+
direct_entry: # derive state from restored scroll position without replay
|
|
77
|
+
static_path: # source-order reading, no script, reduced motion, explicit user choice
|
|
78
|
+
media_budget: # poster, dimensions, cache, decode concurrency, timeout, fallback
|
|
79
|
+
performance_protocol: # exact runtime, input trace, measurements and local targets
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
See [Scroll-driven story](interaction-recipes.md#scroll-driven-story) and the [worked lab](../examples/scroll-story/README.md). A brief must distinguish view-entry triggers from continuous scroll progress.
|
|
83
|
+
|
|
84
|
+
## Fixed-Viewport Navigation Extension
|
|
85
|
+
|
|
86
|
+
Use this instead of assuming a document scroll track when the selected chapter drives the page:
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
state_source: selected chapter ID
|
|
90
|
+
input_owner: # stage, exempt editable/native scroll regions, visible alternatives
|
|
91
|
+
gesture_policy: # wheel units/threshold/burst/reversal; swipe start/cancel/multi-touch
|
|
92
|
+
navigation: # chapter hashes, direct entry, Back/Forward, invalid destination
|
|
93
|
+
boundaries: # first/last behavior; no implicit wrap or browser-navigation trap
|
|
94
|
+
focus_policy: # outgoing panel focus, retained control focus, status announcement
|
|
95
|
+
reading_escape: # visible control, Escape, short viewport, no-script path
|
|
96
|
+
reduced_motion: # immediate chapter changes or a declared static alternative
|
|
97
|
+
teardown: # input listeners, pending state, document overflow restoration
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
See [Full-viewport scene navigation](interaction-recipes.md#full-viewport-scene-navigation). Record ordinary document scrolling, pinned scrubbing, native snapping, and input-driven navigation as distinct choices.
|
|
101
|
+
|
|
102
|
+
## Opinionated Guidance
|
|
103
|
+
|
|
104
|
+
Write cancellation before tuning curves. An animation completion callback should report presentation completion; it should not be the sole authority for network success, focus cleanup, or saving data.
|
|
105
|
+
|
|
106
|
+
## Platform-Specific Guidance
|
|
107
|
+
|
|
108
|
+
Record actual browser, OS, input mode, and relevant animation-library version in the consumer's verification record. A preference query indicates a requested behavior; it does not prove the implemented alternative is comfortable.
|
|
109
|
+
|
|
110
|
+
## Unsupported Absolutes
|
|
111
|
+
|
|
112
|
+
No fixed timing, animation technology, or one reduced-motion treatment works for every brief. A filled template is not executed evidence.
|
|
113
|
+
|
|
114
|
+
## Verification Contract
|
|
115
|
+
|
|
116
|
+
The brief is ready to implement when every state has an owner, every interruption has a resulting state, and every acceptance claim names an observable. Execution must add artifacts and pass/fail results. Use the [Review Workflow](review-workflow.md) for findings and retesting.
|
|
117
|
+
|
|
118
|
+
## Source, License, And Attribution
|
|
119
|
+
|
|
120
|
+
Locally authored template and fictional search scenario. The existing domain contracts provide its evidence boundary.
|
|
121
|
+
|
|
122
|
+
## IA Navigation
|
|
123
|
+
|
|
124
|
+
Parent: [Motion](index.md).
|
|
125
|
+
Next: [Motion Interaction Recipes](interaction-recipes.md).
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Domain Guide
|
|
3
|
+
title: Motion Practice Reference
|
|
4
|
+
description: Bounded motion mechanics, heuristics, platform notes, and verification requirements.
|
|
5
|
+
domain: motion
|
|
6
|
+
lifecycle: experimental
|
|
7
|
+
source_repository: https://github.com/emilkowalski/skills
|
|
8
|
+
source_path: skills/review-animations/STANDARDS.md
|
|
9
|
+
source_revision: 220e8607c90b17337d210125777b7b695f26c221
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Motion Practice Reference
|
|
13
|
+
|
|
14
|
+
Primary role: motion evidence reference.
|
|
15
|
+
|
|
16
|
+
## Repository Boundary
|
|
17
|
+
|
|
18
|
+
This is a practice reference, not a standards document. Each item states what kind of claim it is and how to verify it before use.
|
|
19
|
+
|
|
20
|
+
## Reusable Method
|
|
21
|
+
|
|
22
|
+
For every proposed rule, record:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
Guidance:
|
|
26
|
+
Classification: reusable mechanic | opinionated heuristic | platform-specific | unsupported
|
|
27
|
+
Context:
|
|
28
|
+
Warrant:
|
|
29
|
+
Evidence:
|
|
30
|
+
Verification:
|
|
31
|
+
Boundary:
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The classification controls authority. A reusable mechanic may explain a causal relationship; a heuristic proposes a starting question; a platform note is valid only for its named source/version; an unsupported claim cannot become a blocker.
|
|
35
|
+
|
|
36
|
+
## Practice Map
|
|
37
|
+
|
|
38
|
+
### Purpose And Frequency
|
|
39
|
+
|
|
40
|
+
Guidance: State why a transition exists and how often the user encounters it.
|
|
41
|
+
|
|
42
|
+
Classification: opinionated heuristic.
|
|
43
|
+
|
|
44
|
+
Verification: compare task completion and state comprehension with the behavior present, reduced, and removed.
|
|
45
|
+
|
|
46
|
+
Boundary: frequency alone does not dictate a universal duration or deletion rule.
|
|
47
|
+
|
|
48
|
+
### Spatial Continuity
|
|
49
|
+
|
|
50
|
+
Guidance: Preserve understandable relationships between trigger, moving representation, destination, and dismissal path.
|
|
51
|
+
|
|
52
|
+
Classification: reusable mechanic.
|
|
53
|
+
|
|
54
|
+
Verification: inspect before, intermediate, interrupted, and after states together with DOM and focus order.
|
|
55
|
+
|
|
56
|
+
Boundary: visual continuity cannot override semantic order or accessibility.
|
|
57
|
+
|
|
58
|
+
### Interruption
|
|
59
|
+
|
|
60
|
+
Guidance: A repeatedly triggered or directly manipulated transition should respond to new input without visible jumps or input lockout.
|
|
61
|
+
|
|
62
|
+
Classification: reusable mechanic.
|
|
63
|
+
|
|
64
|
+
Verification: reverse and retarget the interaction at multiple points while recording the presented state.
|
|
65
|
+
|
|
66
|
+
Boundary: no specific animation API is required.
|
|
67
|
+
|
|
68
|
+
### Timing, Easing, And Springs
|
|
69
|
+
|
|
70
|
+
Guidance: Treat timing curves and dynamic parameters as context-dependent starting hypotheses.
|
|
71
|
+
|
|
72
|
+
Classification: opinionated heuristic.
|
|
73
|
+
|
|
74
|
+
Verification: compare variants on the target device and task; record response latency, interruption, overshoot, and completion cues.
|
|
75
|
+
|
|
76
|
+
Boundary: fixed duration, easing, damping, bounce, or velocity values are not cross-product standards.
|
|
77
|
+
|
|
78
|
+
### Performance
|
|
79
|
+
|
|
80
|
+
Guidance: Prefer changes that avoid unnecessary repeated layout and paint work when measurements show they are material.
|
|
81
|
+
|
|
82
|
+
Classification: reusable mechanic.
|
|
83
|
+
|
|
84
|
+
Verification: use browser performance traces, frame evidence, target hardware, and representative concurrent work.
|
|
85
|
+
|
|
86
|
+
Boundary: `transform`, `opacity`, CSS, JavaScript, or Web Animations do not guarantee compositor/GPU execution or superior performance.
|
|
87
|
+
|
|
88
|
+
### Preferences And Input Capabilities
|
|
89
|
+
|
|
90
|
+
Guidance: Provide an equivalent state and feedback path for relevant user preferences and input capabilities.
|
|
91
|
+
|
|
92
|
+
Classification: reusable mechanic.
|
|
93
|
+
|
|
94
|
+
Verification: inspect the actual reduced-motion behavior, keyboard/pointer/touch flows, focus visibility, and state announcement.
|
|
95
|
+
|
|
96
|
+
Boundary: reduced motion may mean removal, substitution, or reduction; hover/pointer media features do not identify a universal device class.
|
|
97
|
+
|
|
98
|
+
### Product Cohesion
|
|
99
|
+
|
|
100
|
+
Guidance: Evaluate whether motion supports the product's declared task and tone.
|
|
101
|
+
|
|
102
|
+
Classification: opinionated heuristic.
|
|
103
|
+
|
|
104
|
+
Verification: use comparative review with named criteria and representative users when the claim concerns human perception.
|
|
105
|
+
|
|
106
|
+
Boundary: cohesion and delight are not mechanically provable from source code.
|
|
107
|
+
|
|
108
|
+
## Opinionated Guidance
|
|
109
|
+
|
|
110
|
+
Shorter, smaller, and less frequent motion is often a useful remediation direction for high-frequency interfaces, but it is not automatically correct. Source-anchored paths and asymmetry may improve comprehension when they correspond to real state relationships; they require rendered evidence.
|
|
111
|
+
|
|
112
|
+
## Platform-Specific Guidance
|
|
113
|
+
|
|
114
|
+
Browser compositor behavior, framework shorthands, native springs, pointer models, and operating-system preferences must be sourced and versioned independently. A native-platform value does not automatically translate to CSS or a JavaScript animation library.
|
|
115
|
+
|
|
116
|
+
## Unsupported Absolutes
|
|
117
|
+
|
|
118
|
+
- Only transform and opacity may be animated.
|
|
119
|
+
- Transform and opacity always run on the GPU.
|
|
120
|
+
- CSS animations categorically outperform JavaScript.
|
|
121
|
+
- Web Animations is universally hardware accelerated.
|
|
122
|
+
- Parent custom-property updates always cause unacceptable recalculation.
|
|
123
|
+
- A framework shorthand necessarily drops frames.
|
|
124
|
+
- Reduced motion always means crossfade rather than removal.
|
|
125
|
+
- Hover and pointer queries identify a touch-device class.
|
|
126
|
+
- All interface motion must remain under one fixed duration.
|
|
127
|
+
|
|
128
|
+
These statements may become scoped hypotheses only after the context, source, and verification protocol are named.
|
|
129
|
+
|
|
130
|
+
## Verification Contract
|
|
131
|
+
|
|
132
|
+
Use slow-motion or frame-by-frame inspection for discontinuity, browser traces for delivery claims, keyboard and assistive-technology checks for interaction/accessibility claims, and real-device or user evidence for perceptual quality. State what the selected evidence cannot prove.
|
|
133
|
+
|
|
134
|
+
## Source, License, And Attribution
|
|
135
|
+
|
|
136
|
+
- Upstream inspiration: [review-animations/STANDARDS.md](https://github.com/emilkowalski/skills/blob/220e8607c90b17337d210125777b7b695f26c221/skills/review-animations/STANDARDS.md)
|
|
137
|
+
- Snapshot: `220e8607c90b17337d210125777b7b695f26c221`
|
|
138
|
+
- Upstream license: MIT, Copyright (c) 2026 Emil Kowalski.
|
|
139
|
+
- Reuse form: independent method rewrite; upstream prose, tables, code, examples, and distinctive ordering were not retained.
|
|
140
|
+
- Evidence boundary: the upstream practice source can suggest questions but cannot prove local performance, accessibility, usability, or quality.
|
|
141
|
+
|
|
142
|
+
## IA Navigation
|
|
143
|
+
|
|
144
|
+
Parent: [Motion](index.md).
|
|
145
|
+
Next: [Design Engineering](../design-engineering/index.md).
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Domain Guide
|
|
3
|
+
title: Motion Review Workflow
|
|
4
|
+
description: Evidence-first workflow for reviewing product-layer motion without changing Layout policy.
|
|
5
|
+
domain: motion
|
|
6
|
+
lifecycle: experimental
|
|
7
|
+
source_repository: https://github.com/emilkowalski/skills
|
|
8
|
+
source_path: skills/review-animations/SKILL.md
|
|
9
|
+
source_revision: 220e8607c90b17337d210125777b7b695f26c221
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Motion Review Workflow
|
|
13
|
+
|
|
14
|
+
Primary role: motion review procedure.
|
|
15
|
+
|
|
16
|
+
## Repository Boundary
|
|
17
|
+
|
|
18
|
+
This workflow reviews declared product-layer motion. It does not review unrelated code, create feature requirements, or turn preferences into blockers. Shared accessibility and evidence gates take precedence; Layout source order, constraints, and scroll ownership remain authoritative for reusable patterns.
|
|
19
|
+
|
|
20
|
+
## Reusable Method
|
|
21
|
+
|
|
22
|
+
### Intake
|
|
23
|
+
|
|
24
|
+
Name the interaction, trigger, frequency, affected state, expected purpose, supported input modes, reduced-motion behavior, and verification surface. If the purpose or observable is absent, record an evidence gap before discussing polish.
|
|
25
|
+
|
|
26
|
+
### Inspect
|
|
27
|
+
|
|
28
|
+
Review four boundaries in order:
|
|
29
|
+
|
|
30
|
+
1. State and source continuity: the before/after states, DOM order, focus, and recoverability remain coherent.
|
|
31
|
+
2. Interaction continuity: repeated input, interruption, reversal, cancellation, and rapid state changes do not jump or lock input.
|
|
32
|
+
3. Accessibility: motion alternatives and input-capability assumptions match the actual user preference and interaction contract.
|
|
33
|
+
4. Delivery evidence: rendered frames, performance traces, and real-device behavior support claims that source inspection cannot prove.
|
|
34
|
+
|
|
35
|
+
### Finding Record
|
|
36
|
+
|
|
37
|
+
| Impact | Location | Observed behavior | Proposed change | Warrant | Evidence | Boundary |
|
|
38
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
39
|
+
| What fails for the task | `file:line` or rendered state | Reproducible observation | Smallest corrective direction | Why the evidence supports it | Trace, recording, test, or source | What remains unproven |
|
|
40
|
+
|
|
41
|
+
### Decision
|
|
42
|
+
|
|
43
|
+
- `blocked`: a declared local contract, accessibility requirement, or required evidence gate fails.
|
|
44
|
+
- `review_required`: the decision depends on missing rendered, device, user, or performance evidence.
|
|
45
|
+
- `approve_with_debt`: behavior is acceptable for the declared scope and the remaining bounded debt has an owner and trigger.
|
|
46
|
+
- `pass`: all declared motion contracts and required evidence are satisfied.
|
|
47
|
+
|
|
48
|
+
## Remediation Order
|
|
49
|
+
|
|
50
|
+
1. Confirm the motion has a task or state purpose.
|
|
51
|
+
2. Remove motion that has no necessary job.
|
|
52
|
+
3. Reduce frequency, distance, scope, or affected elements.
|
|
53
|
+
4. Preserve spatial, semantic, and focus relationships.
|
|
54
|
+
5. Make repeated and interrupted state changes continuous.
|
|
55
|
+
6. Measure the performance claim on the target surface.
|
|
56
|
+
7. Provide an evidence-based alternative for relevant preferences and inputs.
|
|
57
|
+
8. Tune product-specific character only after the contracts above pass.
|
|
58
|
+
|
|
59
|
+
## Opinionated Guidance
|
|
60
|
+
|
|
61
|
+
Frequency, duration, easing, physicality, and cohesion can be useful review prompts. They remain context-dependent heuristics. “Feels right,” popularity, or a practitioner's preference is not a sufficient warrant for blocking a change.
|
|
62
|
+
|
|
63
|
+
## Platform-Specific Guidance
|
|
64
|
+
|
|
65
|
+
CSS transitions, Web Animations, Motion/Framer Motion, pointer events, and component-library transform origins are implementation examples. A review may recommend one only after verifying browser support, current implementation constraints, and the behavior that must change.
|
|
66
|
+
|
|
67
|
+
## Unsupported Absolutes
|
|
68
|
+
|
|
69
|
+
Do not automatically block `ease-in`, a particular scale value, motion longer than a fixed threshold, a keyboard-triggered transition, a non-transform property, or a particular stagger interval. Do not claim GPU execution, hardware acceleration, or accessibility from a property name or API choice alone.
|
|
70
|
+
|
|
71
|
+
## Verification Contract
|
|
72
|
+
|
|
73
|
+
Exercise the actual interaction in its default, repeated, interrupted, reversed, and reduced-motion states. Record the exact environment and observable. Source review may establish declared code paths; rendered and human outcomes require corresponding evidence families.
|
|
74
|
+
|
|
75
|
+
## Scroll Story Evidence
|
|
76
|
+
|
|
77
|
+
For [scroll-driven stories](interaction-recipes.md#scroll-driven-story), add boundary samples immediately before and after each scene transition, forward/reverse comparison, large jumps, direct middle entry, reload/history restoration, narrow and short viewports, long copy, and delayed font/image changes. Deliberately fail or delay a media request and verify stale completion cannot replace current presentation.
|
|
78
|
+
|
|
79
|
+
Record JavaScript update cost separately from animation-frame intervals: neither alone measures compositor frame delivery. Count idle updates to catch observer/decode feedback loops. Record media dimensions, bounded cache entries, and estimated decoded bytes separately from measured process/GPU memory. Set product-local budgets and keep real-device, touch, assistive-technology, and comfort outcomes `not_run` when unobserved.
|
|
80
|
+
|
|
81
|
+
The [Scroll Story verification](../examples/scroll-story/verification.md) records the two worked implementations and the limits of the local run.
|
|
82
|
+
|
|
83
|
+
## Source, License, And Attribution
|
|
84
|
+
|
|
85
|
+
- Upstream inspiration: [review-animations/SKILL.md](https://github.com/emilkowalski/skills/blob/220e8607c90b17337d210125777b7b695f26c221/skills/review-animations/SKILL.md)
|
|
86
|
+
- Snapshot: `220e8607c90b17337d210125777b7b695f26c221`
|
|
87
|
+
- Upstream license: MIT, Copyright (c) 2026 Emil Kowalski.
|
|
88
|
+
- Reuse form: independent method rewrite; upstream prose, tables, code, examples, and distinctive ordering were not retained.
|
|
89
|
+
- Evidence boundary: this procedure adapts a review shape, not its categorical practitioner judgments.
|
|
90
|
+
|
|
91
|
+
## IA Navigation
|
|
92
|
+
|
|
93
|
+
Parent: [Motion](index.md).
|
|
94
|
+
Next: [Motion Practice Reference](practice-reference.md).
|