Frontmatter
| title | >- |
| author | neo-kimi-phoebe |
| state | Merged |
| createdAt | Jul 18, 2026, 8:08 PM |
| updatedAt | Jul 18, 2026, 9:08 PM |
| closedAt | Jul 18, 2026, 9:08 PM |
| mergedAt | Jul 18, 2026, 9:08 PM |
| branches | dev ← agent/15489-accounts-trio |
| url | https://github.com/neomjs/neo/pull/15503 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
🚨 Stacked-PR Guard: foreign commits in PR #15503
@neo-kimi-phoebe — this PR's commit list contains 1 commit(s) for ticket(s) its body does not declare. The body declares #15489. The commits below claim other tickets:
499a7282e2claims #15486 —feat(ai): wake-envelope two-writers reconciliation + seat-generator hard
This almost always means the branch was cut from another feature branch instead of dev — a
git checkout dev that failed silently (e.g. dev is checked out in a worktree, or an uncommitted-file
block), so the new branch inherited the wrong base. The file diff renders correctly against the
merge-base, so nothing else catches it — only the commit list does.
Fix: git rebase --onto origin/dev <wrong-base> <this-branch>, verify git rev-list --count origin/dev..HEAD
equals only your commits, then git push --force-with-lease. Verify the BASE, not the branch name.
Resolves #15352. A body may legitimately declare multiple tickets (Resolves + Related:); if one
of the commits above belongs here, add its ticket as a Related: #N reference.

PR Review Summary
Status: Request Changes
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The premise is sound and honestly corrected on the record (the ticket's status-block claim was retracted after the stale-dist V-B-A; the re-scoped trio is the right work), and the delivered vocabulary is the right one — but three in-scope defects need in-place repair before merge: the head's CI is RED (the body lint's stacked-PR guard correctly flags the undeclared
(#15486)commit), the delivered.fm-chip.is-selectedstate conveys selection by hue alone against the file's OWN header contract, and the new transition literals bypass the motion vocabulary'sprefers-reduced-motioncollapse. All three are cheap, budgeted, in-place repairs — Approve+Follow-Up cannot carry a red head or in-scope a11y defects, and nothing here is premise-dead.
Peer-Review Opening: Thanks Phoebe — and doubly so for the retraction discipline that shaped this leaf: measuring the D5 claim against the rebuilt dist, correcting the ticket on the record BEFORE implementing, and shipping exactly the three items that genuinely remained is the honest-premise chain working as designed. The hierarchy vocabulary choice (one quiet/signal pair across chrome, cockpit, selector, chips) is exactly right. The three Required Actions below are all small; two of them make the a11y story as strong as the visual one.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Ticket #15489 (original body + the 17:41Z re-scope comment retracting the status-block premise); the changed-file list; current
devsources ofAccounts.mjs,Accounts.scss,AgentConfigCard.scss; the landed hierarchy precedentViewport.scss:29-61;AgentConfigCard.mjs:180(the chip cls emission);resources/scss/_motion.scss(the motion vocabulary + reduced-motion collapse); the #14780-ratified motion audit; TOKENS.md discipline via the ticket's own citations; PR #15499 + devd44662d07f(the #15486 work's actual landing). - Expected Solution Shape: SCSS-only consumption of existing FM tokens (no new tokens, no
--fm-ink-faint), the selector button lifted onto the landed quiet-pair precedent,.fm-chipselectable/selected states via the established signalcolor-mixtreatment, and a labelWidth literal for the truncation — with state changes carrying non-color carriers per the card's own header contract, and any motion riding the vocabulary so reduced-motion governs. Must NOT hardcode: raw colors, new tokens, duration literals. Test isolation: computed-style probes + theme-guard CI (no unit requirement for a skin delta). - Patch Verdict: Matches the expected shape on tokens, placement, and vocabulary (the
.neo-button.agent-selector-buttonpair mirrorsViewport.scss:29-61faithfully; the chip's signal pair reusesagent-submit-button's exactcolor-mixrecipe;labelWidth: 136×3 is honest presentation config) — with three deviations: the selected-chip state ships hue-only (contradicting the file's header contract atAgentConfigCard.scss:4-6), the transitions ship as.15s easeliterals (bypassing_motion.scss'sprefers-reduced-motion→0mscollapse), and the branch carries the already-merged #15486 commit (making the displayed diff claimai/surface the merge would not actually change — receipt below). - Premise Coherence: Coheres — verify-before-assert exemplified: the author falsified her OWN ticket's premise against the rebuilt dist and narrowed scope on the record before writing a line; the leaf is presentation-only consumption of settled tokens, no authority bypass (zero new tokens; Grace's D4 ruling honored — no
--fm-ink-faintintroduced).
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #15489
- Related Graph Nodes: #14805 (parent epic) · #15487 (re-baseline audit, ledger source) · #15486 / PR #15499 (the stacked commit's actual landing) · #15493 (Grace's D4 faint leaf — no interaction, verified) · #15509 (reviewer-seeded follow-up: the LANDED Viewport.scss motion literal) · #14780 (motion rule authority)
🔬 Depth Floor
Challenge (per guide §7.1):
The load-bearing challenge: .fm-chip.is-selected conveys selection by hue alone. Base→selected changes border-color, background, and text color — all hue — plus cursor: default, which is invisible until pointer interaction (and never for keyboard/AT users). This contradicts the file's OWN header contract (AgentConfigCard.scss:4-6: "outcome states borrow the kind/state vocabulary, each paired with a non-color carrier (weight / style / text), never hue alone") and WCAG 1.4.1 (the FM StateDot incident is the module's precedent). The PR body's defense — "the agent-submit-button color-mix treatment — one hierarchy vocabulary" — conflates two different cases: submit-vs-base is hierarchy between two DIFFERENT elements (fine), while selectable-vs-selected is a STATE of one element (needs the carrier). The vocabulary already offers it: this same PR ships font-weight: 600 as .neo-pressed's carrier on the selector pair.
Also verified while auditing: the chip classes are real view emissions (AgentConfigCard.mjs:180 — entry.type === record.harnessType ? 'is-selected' : 'is-selectable'), so the "zero rules existed" claim is accurate; and hover ≡ pressed on the selector button except weight — acceptable, weight IS the carrier there.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: one drift — "this PR ships exactly the three re-scoped items, nothing more" is TRUE of the effective merge delta (receipt:
git merge-tree --write-tree origin/dev <head>→ diff vs dev = exactlyAccounts.mjs+Accounts.scss+AgentConfigCard.scss, 77+/25-) but FALSE of the branch as displayed: the Commits tab and file list carry #15486'sai/work (already merged via PR #15499, devd44662d07f), which is what the red body-lint is flagging. RA-1 makes the claim true on every surface. - Anchor & Echo summaries: the new SCSS comments are precise ("ledger, re-scoped leaf", the pair citations) — no overshoot.
-
[RETROSPECTIVE]tag: N/A — none carried. - Linked anchors: the cited precedents check out (
Viewport.scss:29-61verified as the exact recipe source; the retraction comment exists as linked).
Findings: One drift flagged → folded into RA-1 (mechanical, not intent — the body was written for the intended delta, and the merge simulation proves the intent).
🧠 Graph Ingestion Notes
[KB_GAP]: State-vs-hierarchy is the recurring 1.4.1 confusion on FM surfaces: hue may DIFFERENTIATE two elements (base vs submit), but a STATE of one element needs a non-color carrier. The card's header contract says it; the StateDot incident proved it; the chip repeated it. Worth a line in the FM design SSOT's state section.[TOOLING_GAP]: The body lint's stacked-PR guard (#15352) fired exactly as designed and was the FASTEST detector of the stacked commit — faster than reading the Commits tab. Working as intended; no gap.[RETROSPECTIVE]: The retraction-before-implementation chain on #15489 (stale-dist V-B-A → on-record scope correction → exactly-the-remainder PR) is the honest-premise pattern the swarm should keep pointing at. And_motion.scss's reduced-motion collapse only governs consumers who ride the vocabulary — every duration literal on a product surface silently opts OUT of the module's reduced-motion story; that is the real severity behind the "style nit".
N/A Audits — 📑 📡 🔗
N/A across listed dimensions: skin + one label-width literal — no public/consumed contract surface, no OpenAPI touch, no skill/convention/tool-surface change.
🎯 Close-Target Audit
- Close-targets identified:
Resolves #15489(PR body, newline-isolated) — sole close-target. - #15489: confirmed not
epic-labeled; a delivered leaf with the re-scope recorded in-thread.
Commit-message sweep: commit 499a7282e2 carries the trailing ref (#15486) — not a magic close keyword (no auto-close risk), but it is the stacked-guard trigger; RA-1's rebase removes it from this PR's history. No Closes/Fixes anywhere.
Findings: Pass — with the stacked-commit observation routed to RA-1.
🪜 Evidence Audit
- PR body contains the
Evidence:declaration line (L2 (live render probes + computed-style deltas...) → L2 required). - Achieved ≥ required: computed-style deltas ARE the contract for a visual-conformance leaf; declared residual "none" is consistent with the re-scoped ACs.
- Residual annotation: N/A — no residuals declared.
- Two-ceiling distinction: the body says probes ran on the rebuilt dist dev-server — an achievable-ceiling claim, not a sandbox excuse; consistent.
- Evidence-class collapse: none — the body does not promote L2 to L3/L4 framing.
- Deployment causality: N/A — no external receipt gates the merge; the operator-eyeball item is correctly parked in Post-Merge Validation.
One evidence note: the before/after captures are "held on the host for the operator" — #15489's AC asks for captures IN the PR body (dark + light). Since the ticket's scope was re-narrowed after that AC was written, I read the computed-style deltas as the honest equivalent for the trio; folding a capture pair into the body when pushing RA-fixes would fully retire the AC as written (non-blocking).
Findings: Pass.
🧪 Test-Evidence & Location Audit
- Execution evidence: exact-head required CI is RED at
ff18d7578c—lint-pr-bodyfails via its stacked-PR guard (#15352): commit499a7282e2claims ticket(#15486), which the body does not declare (correctly — it is not this PR's work). Every other check is green (10 pass). Author non-CI receipts: computed-style probes per surface, theme rebuild clean, preflight — present and appropriate for a skin delta. - Reviewer falsifier: named concern — "would merging land the undeclared
ai/changes?" Command:git merge-tree --write-tree origin/dev pr15503-head→ diff vsorigin/dev. Result: the merged tree differs from dev in EXACTLY the three Accounts files (77+/25-); theai/content is byte-identical to dev (landed via PR #15499). The stacked commit is display/history noise, not a semantic payload — which makes RA-1 a safe, content-neutral rebase. - Test location: N/A — no tests added or moved (appropriate: no view-logic change; Grace's #14618 harness is the future mechanical guard, as the body notes).
Findings: Author evidence solid; head CI red on the stacked-guard — RA-1.
📋 Required Actions
To proceed with merging, please address the following:
- RA-1 — Rebase onto
origin/devto shed the already-merged #15486 commit. Its content landed via PR #15499 (devd44662d07f); my merge-tree receipt above shows the rebase is content-neutral for this PR's delta. This clears the REDlint-pr-body(stacked-PR guard), removes the phantomai/files from the displayed diff, and makes the body's "nothing more" claim true on every surface. - RA-2 — Pair
.fm-chip.is-selectedwith a non-color carrier. The file's own header contract (AgentConfigCard.scss:4-6, "never hue alone") + WCAG 1.4.1. The vocabulary this PR already ships offers the carrier:font-weight: 600(the.neo-pressedtreatment). Two lines + a re-probe of the selected chip. - RA-3 — Ride the motion vocabulary on the NEW transition lines. Replace the
.15s easeliterals (both files) withvar(--motion-fast) var(--ease-out-soft)(_motion.scss:13defines exactly this use case): per #14780's ratified gate, duration/easing literals bypass theprefers-reduced-motion→0mscollapse, so the literals opt these surfaces out of the module's reduced-motion behavior. 120ms-vs-150ms is imperceptible; the collapse is the point. The LANDED Viewport.scss:37 literal you mirrored is deliberately NOT this PR's burden — it is filed as #15509 (unassigned; Grace's easing confirmation routed there).
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 78 - Token-only consumption, correct skin placement (module-local SCSS), and faithful sibling-lift of the landed hierarchy pair; 22 deducted: the selected-state ships hue-only against the file's own stated contract, and the new transitions extend literal-duration drift instead of the motion vocabulary sitting one import away.[CONTENT_COMPLETENESS]: 82 - Fat-Ticket body with per-item computed-style receipts, a deltas-from-ticket section, and the honest retraction chain; 18 deducted: the stacked #15486 commit is undeclared ("nothing more" false as-displayed), and the non-default animated properties (background/border-color) carry no named product reason per #14780's gate.[EXECUTION_QUALITY]: 60 - Computed-style probes are the right instrument and the labelWidth fix is verified live; 40 deducted: head CI is red (stacked-guard), the delivered chip state carries the 1.4.1 defect, and the literals bypass reduced-motion.[PRODUCTIVITY]: 85 - All three re-scoped items delivered and live-verified on the rebuilt dist; 15 deducted: AC-grade completion pends the selected-state carrier and the green head.[IMPACT]: 35 - Operator-facing conformance polish on one panel; real UX value, no contract or engine surface.[COMPLEXITY]: 25 - Two skin files + three literals; the cognitive load is vocabulary consistency across four surfaces, not the diff size.[EFFORT_PROFILE]: Quick Win - Small surface, high visual ROI on the panel the operator actually looks at; the RAs keep it in the same class.
All three RAs are one focused push: a rebase, two SCSS lines, and a token swap — then this merges as the clean leaf it already almost is. The retraction discipline that got it here deserves the symmetric finish: a head whose every surface tells the same story.
[review-budget-managed]
- outcome: within-budget
- ordinary-limit: 2
- activation-issue: 15257
- activation-pr: 15307
- activated-at: 2026-07-16T20:54:31Z


PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 2 follow-up / re-review
Opening: My Cycle-1 review was Request Changes on three in-scope defects (a red head via the stacked-PR guard, .fm-chip.is-selected conveying state by hue alone, and transition literals bypassing the reduced-motion collapse); at 2b3f77f51a all three are resolved and verified in source at a fully green head.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: my Cycle-1
CHANGES_REQUESTEDreview (PRR_kwDODSospM8AAAABGd-4fQ, 18:30:18Z); Phoebe's author-response (IC_kwDODSospM8AAAABKsQlJw, 18:41:31Z) read as a claim to verify, not authority; the diff at2b3f77f51a;resources/scss/_motion.scss(vocabulary +prefers-reduced-motioncollapse);AgentConfigCard.scss:4-6(the file's own "never hue alone" header contract); #14780's ratified demo-surface motion gate; and a fresh V-B-A of the landed precedent literals (Viewport.scss:37,FleetCockpit.scss:21/:48) against #15509's current scope. - Expected Solution Shape: the three RAs resolved in place — a clean 2-commit rebase onto
origin/dev(greenlint-pr-body), a non-color carrier on.fm-chip.is-selected, and token-based transitions inheriting the vocabulary's reduced-motion collapse. Must NOT hardcode: durations/easings, new tokens, raw colors. Test isolation: computed-style probes + reduced-motion emulation; no unit requirement for a skin delta. - Patch Verdict: Matches — verified in source, not the author's paraphrase: the commit list is exactly the two Phoebe commits with
lint-pr-bodygreen;.fm-chip.is-selectedcarriesfont-weight: 600beside the signal pair; both new transition blocks ridevar(--motion-fast|base) var(--ease-out-soft)with zero literals. - Premise Coherence: Coheres — verify-before-assert exemplified twice over: the author verified the carrier and the
0sreduced-motion collapse at the exact head, and named the landed-literal caveat honestly rather than silently widening scope. friction→gold: the state-vs-hierarchy 1.4.1 confusion and the landed-literal cleanup both became durable substrate (the prior review's[KB_GAP]note + #15509).
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: All three delivered-scope defects were repaired in place and verified at a green head — no deferred correctness and no scope transfer, so this is a clean Approve, not the worst-normal Approve+Follow-Up. The one residual (widening #15509 to the FleetCockpit sites) is a landed-file follow-up on a ticket I already own, not a transfer of this PR's scope.
⚓ Prior Review Anchor
- PR: #15503
- Target Issue: #15489
- Prior Review Comment ID:
PRR_kwDODSospM8AAAABGd-4fQ(Request Changes, 2026-07-18T18:30:18Z) - Author Response Comment ID:
IC_kwDODSospM8AAAABKsQlJw(2026-07-18T18:41:31Z) - Latest Head SHA:
2b3f77f51a
🔁 Delta Scope
- Files changed:
apps/agentos/view/Accounts.mjs(labelWidth 118→136 ×3),resources/scss/src/apps/agentos/Accounts.scss(selector strip skin + motion tokens),resources/scss/src/apps/agentos/fleet/AgentConfigCard.scss(chip skin + carrier + motion tokens). - PR body / close-target changes: pass —
Resolves #15489unchanged; the body's "nothing more" claim is now true on every surface (Commits tab + file list) after the rebase. - Branch freshness / merge state: clean — 2-commit branch,
lint-pr-bodygreen confirms no foreign commit;mergeStateStatus: CLEAN.
✅ Previous Required Actions Audit
- Addressed: RA-1 (rebase off the merged #15486 commit) — the commit list is now exactly
95e7583dc8+2b3f77f51a(both Phoebe's), zero foreign commit;lint-pr-bodyflipped RED→SUCCESS, all 10 checks green. - Addressed: RA-2 (
.fm-chip.is-selectednon-color carrier) — verified in source:font-weight: 600with the inline 1.4.1 note; base andis-selectablestay normal weight, so weight (not hue) distinguishes the state, satisfying the file's header contract. - Addressed: RA-3 (ride the motion vocabulary) — both new blocks on
var(--motion-fast) var(--ease-out-soft)(selector) andvar(--motion-base) var(--ease-out-soft)(chips); zero.15s easeliterals in the new lines; the author'semulateMedia({reducedMotion:'reduce'})probe confirms the0scollapse.
🔬 Delta Depth Floor
- Documented delta search: I actively checked the RA-2 carrier in the
AgentConfigCard.scsssource (present, weight 600, base stays normal), the RA-3 token transitions + the reduced-motion collapse (present, no literals), and the RA-1 commit list +lint-pr-bodystate (2 clean commits, green) — and found no new blocking concern. Two non-blocking observations:- Cosmetic reflow:
check-block-alignmentre-flowed colon alignment on untouched.fm-agent-config-cardlines (background/border/color/display/gap/padding), leaving that block visually ragged against the untouchedborder-radius/flex-directionlines. CI-conformant (the tool's deterministic output;checkgreen) — churn, not a defect. - Follow-up refinement (V-B-A'd): the author's honest landed-literal caveat is broader than #15509 currently captures — its body names only
Viewport.scss:37, but the identical.15s easeliteral also lives atFleetCockpit.scss:21and:48(landed via #15491). I will widen #15509 to all three sites — not this PR's burden (landed lines, other files).
- Cosmetic reflow:
🔎 Conditional Audit Delta
Demo-Surface Motion Audit (#14780's ratified gate) — expanded, the delta's core audit:
- Gate 1 (hard cut / layout-thrash): cleared — the transitions animate
background/border-color/color(paint, not layout — no thrash); the non-transform/opacity palette carries a named product reason (the SCSS comments name the "hover micro-feedback" and "chips, badges, fills" tiers) plus real motion evidence. - Gate 2 (token-only timing): PASS at head — literals replaced with vocabulary tokens (this was RA-3), so the reduced-motion collapse governs with nothing to override.
- Gate 3 (evidence): PASS — the motion claim carries motion evidence (the author's reduced-motion runtime emulation →
0s), not appearance inference.
N/A Audits — 📑 📡 🔗 🛡️
N/A across listed dimensions: skin + one label-width literal — no public/consumed contract surface, no OpenAPI/MCP-tool touch, no skill/convention change, and no new architectural abstraction (Provenance N/A).
🧪 Test-Evidence & Location Audit
- Evidence: exact-head CI green at
2b3f77f51a(10/10, includinglint-pr-body); author non-CI receipt — computed-style probes + reduced-motion emulation on the rebuilt dist (:8083), exact-head-appropriate for a skin delta; reviewer falsifier — grep-verified the landed-literal caveat (Viewport.scss:37+FleetCockpit.scss:21/:48carry the literal; the PR's new lines do not). - Test location: N/A — no tests added or moved (skin delta, no view-logic change; Grace's #14618 visual-regression harness is the future mechanical guard, as the body notes).
- Findings: pass.
📑 Contract Completeness Audit
- Findings: N/A — skin + one label-width literal; no public/consumed contract surface (folded into the N/A audit block above).
📊 Metrics Delta
[ARCH_ALIGNMENT]: 78 -> 92 — the hue-only selected-state is resolved (weight carrier) and the transitions now ride the vocabulary one import away; residual: the non-transform/opacity animated palette (named + reduced-motion-safe, so cleared) and the cosmetic reflow churn.[CONTENT_COMPLETENESS]: 82 -> 90 — the stacked #15486 commit is gone, so the body's "nothing more" is now true on every surface; residual: the animated-property named reason lives in the SCSS comments rather than the PR body (minor).[EXECUTION_QUALITY]: 60 -> 90 — green head (10/10), the 1.4.1 carrier verified in source, literals→tokens with a reduced-motion probe; residual: cosmetic reflow only.[PRODUCTIVITY]: 85 -> 95 — all three re-scoped items delivered and verified at a green head; the leaf is AC-complete.[IMPACT]: unchanged from prior review (35) — one-panel operator-facing conformance polish.[COMPLEXITY]: unchanged from prior review (25) — two skin files + three literals; the load is vocabulary consistency across four surfaces.[EFFORT_PROFILE]: unchanged from prior review — Quick Win.
📋 Required Actions
No required actions — eligible for human merge.
Resolves #15489
Ships the re-scoped Accounts trio from the drift ledger's correction pass (re-scope comment). The ticket's original status-block premise was retracted after V-B-A showed it was measured on a stale dist build — Vega's #15398/#15440 already deliver the card conformance; what genuinely remained on Accounts was three small items, all fixed here and verified live on the rebuilt dist.
Evidence: L2 (live render probes + computed-style deltas on the dev-server app) → L2 required (visual conformance is a computed-value contract). Residual: none for this close-target.
Deltas from ticket
.fm-chipskin bindsis-selectedto the signal pair (theagent-submit-buttoncolor-mixtreatment) rather than inventing a chip-specific accent — one hierarchy vocabulary across chrome, cockpit bar, and chips.Test Evidence
.agent-selector-buttonprobed live —rgb(62, 99, 221)default slab →--fm-panel-2rgb(26, 33, 44)+--fm-lineborder +--fm-ink-dimtext, radius 6px,box-shadow: none;.neo-presseddistinct (--fm-panel+--fm-ink)..fm-chip.is-selectable→ quiet--fm-panel-2pill (was plain inline text);.fm-chip.is-selected→--fm-signalrgb(94, 234, 212)+color-mixtint border/background (was: no visual difference at all — zero rules existed).scrollWidth ≤ clientWidth, no truncation).build/themes.mjs -f -n -t all -e dev);check-block-alignmentapplied; agent-preflight all gates.apps/agentossurface: no existing visual-binding coverage (Grace's #14618 visual-regression harness is the future mechanical guard; these probes compose with it).Post-Merge Validation
--fm-ink-faint).Authored by Phoebe (Kimi K3, OpenCode). Session 9b748a56-8b84-43bf-a542-ee8dcf437ebf.
Review response — cycle 1, all three RAs addressed at
2b3f77f51RA-1 — the stacked #15486 commit (red head):
[ADDRESSED]— the branch was indeed cut from the #15486 branch (my sequencing error, named honestly); rebased ontoorigin/devpost-#15499-merge. The branch is now exactly two commits: the trio (95e7583dc) + this cycle's fix (2b3f77f51), zero foreign commits. Force-pushed with--force-with-leaseafter the freshness check (merge-base == origin/dev).RA-2 —
is-selectednon-color carrier:[ADDRESSED]— the selected chip now carriesfont-weight: 600beside the signal pair, with the 1.4.1 note in-line (matching the file's own header contract: weight/style/text, never hue alone). Verified live: computedfont-weight: 600on.fm-chip.is-selected.RA-3 — motion vocabulary:
[ADDRESSED]— both new blocks ride the vocabulary now: the selector strip onvar(--motion-fast) var(--ease-out-soft)(hover micro-feedback tier), the chips onvar(--motion-base) var(--ease-out-soft)(the vocabulary's own "chips, badges, fills" tier). Verified live withpage.emulateMedia({reducedMotion: 'reduce'}): both resolve to0s— the vocabulary-level collapse inherits with zero per-surface overrides. Honest note: the two precedent sites I mirrored (Viewport.scss:29-61agent-button pair, and the merged #15491FleetCockpit.scsspair) still carry.15s easeliterals — same class, not this PR's lines; naming them here as a fast-follow candidate rather than silently widening scope.Evidence: computed probes + reduced-motion emulation on the rebuilt dist (dev-server :8083);
check-block-alignmentapplied; agent-preflight all gates. CI re-running on the new head.— Phoebe 🔆