Open resolved decisions from the margin marker, not the prose #397
- MA
## Why
Reading prose that a resolved decision produced washed the passage green and popped the decision preview under the pointer. That is too loud while reading. The marker icon was also drawn in the generic icon grey rather than the settled green.
## What changed
- Hovering or clicking the prose does nothing for decisions now. Clicking it only places the caret, and it closes a pinned decision like any other outside click. - Only the margin marker opens a decision. Hover or keyboard focus shows the preview and the related-prose wash. A click, Enter or Space opens the pinned popover (Discard, Reopen, Close). Escape or an outside click closes it. - The marker has an invisible `::before` hit area that reaches 12px past its drawn edge. It reaches 12px up and down, or half the gap to a neighbouring marker when two sit closer than that, so the space between them is split rather than won by the later one (`verticalReach`). Sideways it stops at the page edge and at the start of the prose (`markerReach` in `resolved.ts`), so it never covers a letter. The disc stays 20px. - Touch: a tap pins straight away. Pointer-enter ignores touch, and focus caused by a press doesn't start a preview. On a phone the compact bar's hit area is now 50px tall but only as wide as the gutter (about 16px). Before, it was 44px wide and covered the first letters of the prose. - The marker icon uses `--color-success` on `--color-success-wash` (4.3:1, up from 3.7:1 for grey). Hover, focus and pinned states now show the existing success outline with a `--color-success-ink` icon (6.1:1). The app has no dark theme, so there is only light mode to check. - Removed the now-unused prose `pin` pointer action and the coarse-pointer marker sizing. - The single pin and the exact-highlight clearing are unchanged.
## Screenshots
Hovering the prose, before / after (the blue card on the right is a seeded comment's own preview, which this PR doesn't change):

Marker colour, before / after:

Hit area (dashed, debug only). It is clipped at the prose edge:

After: pointer 10px off the marker shows the preview and wash. Clicking there pins it:

Phone: before tap / after reach (gutter only) / after tap pins:

## Testing
- `bun test packages/editor`: 537 pass - `bun test scripts`: 275 pass - `bun run types`: pass - `bun run build`: pass (initial JS 247167 B, under budget) - Checked by hand in Chromium against a local fake-GitHub server. Prose hover/click: no preview, no wash, no dialog. Within 12px: preview and wash. 16px away: nothing. The first prose letter doesn't hit the marker. A click in the reach pins. Tab then Enter/Space pins. Escape and outside click close. A phone tap pins with no tooltip. - Updated E2E specs: `decision-marker`, `decision-prose`, `decision-anchor-stress`, `source/decision-reader.native`. Local E2E is suspended for this run, so CI's browser job runs them.
## Needs a design-contract review
`bun run ci` fails only on the reviewed dynamic exception for `packages/editor/src/resolved-layer.tsx` in `scripts/design-contract/exceptions/dynamic-editor.json` (both groups for that file). The new file hash is `0b9632edfc6282892be8296588da0a4a953c69de4e5815c2d05a4d7738977c59`, and the marker case changes from `markerStyle(marker, lineHeight, hit, inset)` to `markerStyle(marker, lineHeight, prose, vertical[index]!)`. This is safe: the style is still measured anchor geometry (top/left, compact width/height), plus px custom properties for the clipped reach. No token or class logic changed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
MaggieAppletonauto-rebase-enabledlast month on GitHub
MaggieAppletonmerged b751601ead5dlast month on GitHub
MaggieAppletonhead-ref-deletedlast month on GitHub