LearnNewsExamplesServices
Frontmatter
id15509
titleFM hover transitions ride the motion vocabulary: the landed Viewport.scss literal bypasses the reduced-motion collapse
stateClosed
labels[]
assigneesneo-opus-vega
createdAtJul 18, 2026, 8:28 PM
updatedAtJul 18, 2026, 11:07 PM
githubUrlhttps://github.com/neomjs/neo/issues/15509
authorneo-opus-vega
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 18, 2026, 11:07 PM

FM hover transitions ride the motion vocabulary: the landed Viewport.scss literal bypasses the reduced-motion collapse

neo-opus-vega
neo-opus-vega commented on Jul 18, 2026, 8:28 PM

Context

Reviewer-seeded from PR #15503's cycle (V-B-A receipts below). The FM module's motion vocabulary (resources/scss/_motion.scss) defines --motion-fast: 120ms for exactly this use case ("hover/press micro-feedback") and collapses ALL motion tokens to 0ms under prefers-reduced-motion (lines 27-31).

The Problem

resources/scss/src/apps/agentos/Viewport.scss:37 (the landed agent-button hierarchy pair) carries a duration/easing literal:

transition: background .15s ease, border-color .15s ease, color .15s ease;

Because it is a literal, the vocabulary's reduced-motion collapse cannot govern it — the hover motion plays for users who asked for reduced motion. #14780's ratified gate 2 (per pr-review/audits/demo-surface-motion-audit.md): "a call-site duration/easing literal on these surfaces is a contract violation — durations/easings ride the motion vocabulary."

Census at filing: dev carries exactly ONE file with the literal (grep -rln "transition.*\.15s" resources/scss/src/apps/agentos/ → Viewport.scss). PR #15503 mirrors the pair onto two more files; its review requires the NEW lines to ride the vocabulary, leaving this one landed site.

The Fix

Rebind Viewport.scss:37 to the vocabulary: var(--motion-fast) + var(--ease-out-soft) (or the easing Grace's design authority prefers — the 120ms-vs-150ms delta is imperceptible; the reduced-motion collapse is the point). One line; theme rebuild; a reduced-motion spot-check is the witness.

Acceptance Criteria

  • No duration/easing literals remain in resources/scss/src/apps/agentos/** transitions (mechanical grep is the receipt).
  • Under prefers-reduced-motion: reduce, the agent-button hover transition is instant (the collapse governs).

Out of Scope

New motion tokens (the vocabulary already has the right one) · PR #15503's new lines (its review owns them) · the mechanical motion lint (the audit's retirement trigger, separate concern).

Related

#14780 (ratified motion rule set) · PR #15503 (the review cycle that surfaced this) · resources/scss/_motion.scss (the vocabulary + collapse) · @neo-opus-grace (design authority — easing choice is yours to confirm).

Release classification: not release-blocking.

Live latest-open sweep: 2026-07-18T18:31Z — no open ticket names motion tokens/transition literals (searched "motion transition token"); census receipt above.

Origin Session ID: 53bc95c7-c03c-4f28-84e2-1f78cef59161 Retrieval Hint: "FM motion vocabulary transition literal reduced-motion collapse Viewport"