diff --git a/packages/extension/src/manager/panes/persona-map.tsx b/packages/extension/src/manager/panes/persona-map.tsx
index 622d2b9..898d450 100644
--- a/packages/extension/src/manager/panes/persona-map.tsx
+++ b/packages/extension/src/manager/panes/persona-map.tsx
@@ -236,15 +236,28 @@ type Mood = "plain" | "self" | "down" | "up" | "dim";
*/
function cardStyle(mood: Mood, extra?: React.CSSProperties, stripe?: string): React.CSSProperties {
const lit = mood === "down" || mood === "up" ? FLOW_COLOUR[mood] : null;
+ // **The selection outranks everything it reaches, visually.**
+ //
+ // Both used to wear a coloured border, so selecting a persona lit its face,
+ // its attributes and its context in the same treatment as the row that had
+ // been clicked — a dozen outlined boxes and no way to tell which one was the
+ // question. "I clicked on the persona DID, but how can you tell?"
+ //
+ // So the two states stop competing: a reached card is a *wash* with the
+ // ordinary border, and only the selection carries a ring. One outline on the
+ // screen, and it is always the thing you pressed.
const ring =
mood === "self"
- ? { border: `2px solid ${c.accent}`, background: c.surface }
+ ? { border: `2px solid ${c.accent}`, background: c.accentSoft }
: lit
- ? { border: `1px solid ${lit.edge}`, background: lit.wash }
+ ? { border: `1px solid ${c.line}`, background: lit.wash }
: { border: `1px solid ${c.line}`, background: c.surface };
const shadows = [
stripe ? `inset 3px 0 0 ${stripe}` : null,
- mood === "self" ? `0 0 0 4px ${c.accentSoft}` : null,
+ // Two rings rather than one: a hairline of the page's own ground, then the
+ // accent. It reads as lifted off the band at any zoom, where a single soft
+ // halo disappears against a card that is already tinted.
+ mood === "self" ? `0 0 0 2px ${c.ground}, 0 0 0 5px ${c.accent}` : null,
].filter(Boolean);
return {
borderRadius: "var(--w-r-md)",
@@ -553,8 +566,15 @@ export function IdentityMap({
{
if (e.target === e.currentTarget) setSelection(null);
}}>
+ {/* Behind the cards, not over them.
+ The SVG is positioned and the bands are not, so the SVG won a
+ stacking contest nobody entered it into: every edge was drawn
+ *across* the boxes it connects, through the type and the value. The
+ bands become positioned with a higher `zIndex` below, which is the
+ whole fix — an edge that disappears under a card reads as going
+ behind it, which is what it does. */}