The fourth slice of the console-UI parity port (design/apple-console-ui-parity.md, PR-4):
- `ConsoleContract.swift` (PunktfunkShared): `ConsoleMotion` — the vectors' `motion_spring`
numbers (response 0.42, damping 0.88, slide 36, scales 0.985/0.96, reveal 0.4, interruptible)
— and `GpSettingsTab`, moved out of the executable target so `ConsoleVectorsTests` can reach
both. `testTabNamesMatchTheSharedVectors` (this client's trailing About is its own; the
desktop's Input is `desktop_only`) and `testMotionMatchesTheSharedVectors` (the v2 block) join
the palette test; the vectors' v1 `$deprecated` note now names Android as the last v1 reader.
- `GamepadShellMotion.screen` is `.spring(0.42, 0.88)` — the console's `springs::NAV` — instead
of the 0.26 s ease-out-cubic; Reduce Motion crossfades on the desktop's `REDUCED_NAV`
(0.22, 1.0) with no slide and no scale, instead of snapping.
- Interruptible: while a push is in flight no layer owns the controller, so a zero-size
`MidPushBackCatcher` takes B alone and clears the trigger that raised the top screen — the same
spring carries it back down, the way the desktop retargets its NAV spring to 0. A and the rest
stay dropped until the spring has passed 0.85 of its travel (`inputOpensAfter`, 0.20 s), not
until a tween has finished (0.28 s): the wall is gone, the double-tap protection stays.
- The library layer's place stack rides the same spring and the same reduce-motion crossfade.