# SUDX Motion Law

Motion communicates identity, continuity, loading, state, or response. It must
not exist only to decorate a surface.

## Radar

The radar uses a crisp 1.5px Clay sweep and a short fading Bayer tail. The
mark stays fixed at the center. The tail uses the SUDX 4 by 4 Bayer
matrix but never the full chart halo.

The sweep radius is 43% of the field and the drawn ring sits at 41%, so the arm
crosses that ring by a fixed margin at every size. A surface that draws its ring
in pixels sizes the field from the ring rather than choosing it, or the two
drift apart as soon as either moves.

The tail takes its step count from the arc it covers, not from a fixed number of
rays. A fixed count spreads further apart the larger the field gets, which turns
the band into scattered dots.

The radar carries no data. It shows no position, count, or identity from any
product, and it is never captioned as though it did.

## Chart trajectories

The full CMA dither halo is reserved for chart trajectories: 2px solid core,
5.5px capless Bayer aura, 2px cells, 8px pattern, threshold .28, realized
occupancy .25, and alpha .85.

## Ticker

The ticker is illustrative, labeled as such, linear, and slow enough to read.
It pauses while inspected and while the document is hidden.

## Rotating headline

The rotating vocabulary is shipping, trade, freight, ports, and cargo. Static
HTML starts with shipping. Enhancement must not cause surrounding layout
reflow.

## Control response

Controls resolve between rest, hover, focus, and active over
`--sudx-transition-control` (120ms ease-out) rather than snapping. A working
button carries a loading state: a band of the 4 by 4 Bayer field sweeps across
it while the accessible label stays in place and readable. Neither is
decoration; each communicates state or response.

## Safety

`prefers-reduced-motion: reduce` removes automatic ticker translation, typed
transitions, pointer tilt, radar animation, control state transitions, and the
loading Bayer sweep, which holds as a static field. Hidden documents stop timed
and animation-frame work. Every primitive has a complete static fallback.
