Speed
Slow motion multiplier
1×
Reduced motion
Show

Hardcoded durations and curves

58 measured
The token linter polices type, spacing, radius and colour. It has no entry for duration or easing, which is a complete explanation for every site below. Adding those entries turns rubric criterion 3 from a review question into a build failure.Decide here: What each hardcoded site becomes, and whether the swap is visible at all.
58Hardcoded sitesmeasured against core@0.5.0
34Durations and delays
24Curves
12Durations with no curvesilently taking the CSS default

Four families, two of them blocked

Reduced-motion escapes

19 sitesblocked
Every one of these is the same idiom: collapse a transition to nothing when the user has asked for less motion. It is not sloppiness, and it is not safe to sweep blind — a zero duration fires no transitionend, so anything sequencing off that event breaks. The 0.01s spelling exists to keep the event.
Blocked: Decide whether --duration-instant is 0 or 0.01ms before sweeping any of these.
core/hooks/containerReveal.stylex.ts:253core/hooks/containerReveal.stylex.ts:261core/hooks/containerReveal.stylex.ts:267core/BottomSheet/BottomSheet.tsx:94core/BottomSheet/BottomSheetPanel.tsx:149core/BottomSheet/BottomSheetSwitcher.tsx:105+13 more in the table below

Table interaction tint

12 sitesmechanical
Ten sites across columnResize, groupedRows, rowExpansion, stickyColumns and tree: seven 150ms durations and three bare `ease` curves, several of them the two halves of one `transition` shorthand. This resolves an open question in the brief — its "nine hardcoded values in Table" and its "six hardcoded 150ms values in Table tree" are the same set counted twice, not fifteen sites. 150ms and the token’s 175ms are near-indistinguishable at 1×, so what this family buys is the lint rule, not a visual change.
Today — 150ms, default curve
Row one
Row two
Row three
Hardcoded 150ms with the CSS default curve.
Proposed — --duration-state, --ease-state
Row one
Row two
Row three
The state token, at 175ms with --ease-state.
state
175ms
Put the rail on 4× or 8× if you want to see the difference between 150 and 175 at all. That it is hard to see at 1× is the honest finding, and it is the argument for treating this family as a lint fix rather than a design change.
core/Table/plugins/columnResize/useTableColumnResize.tsx:248core/Table/plugins/columnResize/useTableColumnResize.tsx:248core/Table/plugins/columnResize/useTableColumnResize.tsx:248core/Table/plugins/columnResize/useTableColumnResize.tsx:248core/Table/plugins/groupedRows/useTableGroupedRows.tsx:179core/Table/plugins/rowExpansion/useTableRowExpansion.tsx:87+6 more in the table below

Ambient loops

3 sitesblocked
StatusDot at 2s and Chat at 1.5s, both outside a scale that stops at 1300ms. They did not bypass the tokens by accident — there is no token that reaches. This group cannot be swept until the slow band is extended or ambient motion is declared a separate concern.
Today — hardcoded, outside the scale
Today the loop slows to 3s rather than stopping. Slower vestibular motion is still vestibular motion, and it reads as a hung interface.
Stopped
Degrade: loops stop and are replaced with a static determinate state. Opacity and colour feedback survive; movement does not.
Blocked: Needs the ambient-band decision.
core/Chat/ChatMessageMetadata.tsx:77lab/ChatReasoning/ChatReasoning.tsx:152core/StatusDot/StatusDot.tsx:56

Curves authored by hand

20 sitesmechanical
Mostly linear, and mostly correct: a progress bar and a scroll-driven wheel should be linear. The exception is the sheet exit, which authors a full cubic-bezier with a comment measuring why the standard curve fails. That comment is the specification for --ease-exit.
core/BottomSheet/BottomSheet.tsx:109core/BottomSheet/BottomSheetPanel.tsx:172core/BottomSheet/BottomSheetSwitcher.tsx:114core/Chat/ChatDictationButton.tsx:75core/Chat/ChatMessageMetadata.tsx:78lab/Chat/ChatTypingIndicator.tsx:79+14 more in the table below

Every site

58 of 58
ComponentSitePropertyTodayBecomes
(shared)core/hooks/containerReveal.stylex.ts:253transitionDelay0s--duration-instant
(shared)core/hooks/containerReveal.stylex.ts:261transitionDelay0s--duration-instant
(shared)core/hooks/containerReveal.stylex.ts:267transitionDelay0s--duration-instant
(shared)core/hooks/useKeyboardHint.tsx:135transitionDuration150ms--duration-state
BottomSheetcore/BottomSheet/BottomSheet.tsx:94transitionDuration0.01s--duration-instant
BottomSheetcore/BottomSheet/BottomSheet.tsx:109transitionTimingFunctionlinear--ease-linear
BottomSheetcore/BottomSheet/BottomSheetPanel.tsx:149transitionDuration0.01s--duration-instant
BottomSheetcore/BottomSheet/BottomSheetPanel.tsx:172transitionTimingFunctioncubic-bezier(0.3, 0, 0.6, 0.6)--ease-exit
BottomSheetcore/BottomSheet/BottomSheetSwitcher.tsx:105transitionDuration0.01s--duration-instant
BottomSheetcore/BottomSheet/BottomSheetSwitcher.tsx:114transitionTimingFunctionlinear--ease-linear
Buttoncore/Button/Button.tsx:380animationDuration1ms--duration-instant
Chatcore/Chat/ChatComposerDrawer.tsx:208transitionDelay0ms--duration-instant
Chatcore/Chat/ChatDictationButton.tsx:75transitionTimingFunctionease-out--ease-state
Chatcore/Chat/ChatMessageMetadata.tsx:77animationDuration1.5sno token reaches
Chatcore/Chat/ChatMessageMetadata.tsx:78animationTimingFunctionease-in-out--ease-state
Chatlab/Chat/ChatTypingIndicator.tsx:79animationTimingFunctionease-in-out--ease-state
Chatlab/Chat/ChatTypingIndicator.tsx:85animationDelay160ms--duration-state
Chatlab/Chat/ChatTypingIndicator.tsx:88animationDelay320ms--duration-enter
ChatReasoninglab/ChatReasoning/ChatReasoning.tsx:152animationDuration4sno token reaches
ChatReasoninglab/ChatReasoning/ChatReasoning.tsx:153animationTimingFunctionlinear--ease-linear
CircularProgresslab/CircularProgress/CircularProgress.tsx:188animationTimingFunctionlinear--ease-linear
CircularProgresslab/CircularProgress/CircularProgress.tsx:210animationTimingFunctionease-in-out--ease-state
CommandPalettecore/CommandPalette/CommandPaletteInput.tsx:62transitionDuration1ms--duration-instant
CommandPalettecore/CommandPalette/CommandPaletteInput.tsx:63transitionDelay150ms--duration-state
DateInputcore/DateInput/TouchDateField.tsx:254transitionTimingFunctionlinear--ease-linear
DateInputcore/DateInput/TouchDateField.tsx:256transitionDuration0.01s--duration-instant
DateInputcore/DateInput/TouchDateField.tsx:311transitionTimingFunctionlinear--ease-linear
DateInputcore/DateInput/TouchDateField.tsx:313transitionDuration0.01s--duration-instant
DateInputcore/DateInput/TouchDateField.tsx:375transitionDuration0.01s--duration-instant
DateInputcore/DateInput/TouchDateField.tsx:390transitionTimingFunctionlinear--ease-linear
DateInputcore/DateInput/TouchDateField.tsx:392transitionDuration0.01s--duration-instant
DateInputcore/DateInput/TouchDateField.tsx:442transitionDuration0.01s--duration-instant
DateInputcore/DateInput/TouchDateField.tsx:492transitionTimingFunctionlinear--ease-linear
DateInputcore/DateInput/TouchDateField.tsx:494transitionDuration0.01s--duration-instant
DateInputcore/DateInput/Wheel.tsx:172animationTimingFunctionlinear--ease-linear
Drawerlab/Drawer/Drawer.tsx:161transitionDuration0.01s--duration-instant
Drawerlab/Drawer/Drawer.tsx:234transitionDuration0.01s--duration-instant
Lightboxcore/Lightbox/Lightbox.tsx:190transitionTimingFunctionease-out--ease-state
LogStreamlab/LogStream/LogStream.tsx:173transitionTimingFunctionease-out--ease-state
MobileNavcore/MobileNav/MobileNav.tsx:132transitionDuration0.01s--duration-instant
MobileNavcore/MobileNav/MobileNav.tsx:162transitionDuration0.01s--duration-instant
ProgressBarcore/ProgressBar/ProgressBar.tsx:260animationTimingFunctionease-in-out--ease-state
Spinnercore/Spinner/Spinner.tsx:265animationTimingFunctionlinear--ease-linear
StatusDotcore/StatusDot/StatusDot.tsx:56animationDuration2sno token reaches
StatusDotcore/StatusDot/StatusDot.tsx:57animationTimingFunctionease-in-out--ease-state
Steppercore/Stepper/Step.tsx:388transitionTimingFunctionlinear--ease-linear
Tablecore/Table/plugins/columnResize/useTableColumnResize.tsx:248transition150ms--duration-state
Tablecore/Table/plugins/columnResize/useTableColumnResize.tsx:248transition150ms--duration-state
Tablecore/Table/plugins/columnResize/useTableColumnResize.tsx:248transitionease--ease-state
Tablecore/Table/plugins/columnResize/useTableColumnResize.tsx:248transitionease--ease-state
Tablecore/Table/plugins/groupedRows/useTableGroupedRows.tsx:179transitionDuration150ms--duration-state
Tablecore/Table/plugins/rowExpansion/useTableRowExpansion.tsx:87transitionDuration150ms--duration-state
Tablecore/Table/plugins/stickyColumns/useTableStickyColumns.tsx:234transition150ms--duration-state
Tablecore/Table/plugins/stickyColumns/useTableStickyColumns.tsx:234transitionease--ease-state
Tablecore/Table/plugins/stickyColumns/useTableStickyColumns.tsx:260transition150ms--duration-state
Tablecore/Table/plugins/stickyColumns/useTableStickyColumns.tsx:260transitionease--ease-state
Tablecore/Table/plugins/tree/useTableTreeData.tsx:251transitionDuration150ms--duration-state
Tablecore/Table/plugins/tree/useTableTreeData.tsx:267transitionDuration150ms--duration-state

Literals in use

ValueSites
0.01s13
linear11
150ms10
ease-in-out5
ease4
ease-out3
0s3
1ms2
cubic-bezier(0.3, 0, 0.6, 0.6)1
0ms1
1.5s1
2s1
160ms1
320ms1
4s1

By component

ComponentSites
Table12
DateInput11
Chat7
BottomSheet6
(shared)4
CommandPalette2
MobileNav2
StatusDot2
ChatReasoning2
CircularProgress2
Drawer2
Button1
Lightbox1
ProgressBar1
Spinner1
Stepper1
LogStream1

Sweep order

StepWhy this order
1. Land the semantic tokens as aliasesNothing to migrate to until they exist, and aliasing means nothing shifts perceptually while the sweep runs.
2. Add the lint rules in warn modeProduces the real inventory continuously, so this page stops being a snapshot.
3. Answer the two blocked familiesWhether --duration-instant is 0 or 0.01ms, and whether the slow band grows an ambient tier.
4. SweepMechanical once the tokens and the answers both exist.
5. Flip lint to errorOnly once the count is zero, or the remainder is explicitly allowlisted.
The rule stub is on Export tuning. The reduced-motion decision that blocks family one is on Reduced motion.