feat(dsh-plugin-browserskill): default the overlay to the top-right + dsh-native styling

Review follow-ups: the card/capsule now default to the top-right (clear
of the composer), and the overlay reads as part of the shell instead of
a foreign widget:

- shared primitives everywhere: Button (outline/ghost sm) for
  Interrupt/Pop out with the shell's danger hover token, Tooltip for
  the one-time interrupt semantics hint (native span anchor — Button
  does not forward refs), StateDot for status, and outline icons
  (Stop/RightUp/ChevronDown/Warning) replacing text glyphs;
- every color/surface/shadow/label now uses --dsw-alias-* semantic
  tokens (bg-overlay, border-l1/l2, state-*-primary, label-*,
  interactive-bg-hover[-danger], brand-primary focus rings,
  dsw-shadow-lv1/lv2) — no invented tokens, no literal colors (dsh 0.1
  ships no spacing/radius scale; those stay px like dsh's own code);
- strip item focus ring uses brand-primary; focus-visible and
  reduced-motion preserved.
This commit is contained in:
BB-fat
2026-08-14 07:57:07 +00:00
parent 916229dc62
commit 47070fdc14
3 changed files with 139 additions and 145 deletions
@@ -109,11 +109,11 @@ describe("ObservationOverlay", () => {
const h = makeHarness([BUSY]);
render(<ObservationOverlay store={h.store} />);
const button = await screen.findByRole("button", { name: /Interrupt the current/ });
fireEvent.pointerEnter(button);
fireEvent.mouseOver(button);
await screen.findByRole("tooltip");
fireEvent.pointerLeave(button);
fireEvent.mouseLeave(button);
fireEvent.click(button);
fireEvent.pointerEnter(button);
fireEvent.mouseOver(button);
expect(screen.queryByRole("tooltip")).toBeNull();
});