Tag hang catalogue

Where a row of tags sits under text in a column, the badge boxes hang left by the badge's own padding, so the words in the tags start on the text's edge. The text aligns; the box hangs. Each surface shows before and after, light and dark. The chrome bar over each frame reports, live, how far each line-starting tag's first letter sits from the first letter of the text above it.

Artefact — real theme CSS, live-captured markup, nothing added inside Commentary — not the product Palette:

1 · Quote card — the tag row under the quote

.quote-card .badges · molecules/badge-row.css · rendered by QuoteCard.tsx on Quotes, Screens (ScreensLens.tsx), Discussion (DiscussionLens.tsx, its own markup with the same classes) and the uncategorised floor

before · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
after · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
before · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
after · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust

Hover: the × circles and the proposed badge's action pill

before · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
after · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
before · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
after · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust

A quote with no tags yet: the add button starts the row

before · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
after · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
before · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
after · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff

Should the speaker badge hang too? Only if it starts a line, and it doesn't always

speaker hung · wrapped · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
speaker hung · inline · light
[00:30]
“fresh folkloric style the onjangi collection okay okay that’s sort of ikea stories but we just want to go shopping which at least is wealth it’s a big yellow sign okay I’m going to do that” p2Fred
Confusionexpectation mismatchworkaroundtrust
speaker hung · wrapped · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
speaker hung · inline · dark
[00:30]
“fresh folkloric style the onjangi collection okay okay that’s sort of ikea stories but we just want to go shopping which at least is wealth it’s a big yellow sign okay I’m going to do that” p2Fred
Confusionexpectation mismatchworkaroundtrust

Screens lens — the same card, compact (screens.css rules inlined)

before · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
after · light
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
before · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust
after · dark
[03:17]
“I have read and understood the IKEA privacy policy.” p3Fritchoff
Confusionexpectation mismatchworkaroundtrust

2 · Transcript margin — tags under the section label

.margin-tags · molecules/transcript-annotations.css · components/Annotation.tsx

before · light
Checkout and Delivery
frictionexpectation mismatchfeature request
after · light
Checkout and Delivery
frictionexpectation mismatchfeature request
before · dark
Checkout and Delivery
frictionexpectation mismatchfeature request
after · dark
Checkout and Delivery
frictionexpectation mismatchfeature request

4 · Codebook groups — tags under the group title

.codebook-group .tag-row · organisms/codebook-panel.css · CodebookAuthoring.tsx (both read-only framework groups and your own codebook's rows)

before · light
Sentiment

AI-detected emotional responses

Frustration
5
Confusion
7
Doubt
0
Surprise
5
Satisfaction
9
Delight
3
Confidence
0
Total29
after · light
Sentiment

AI-detected emotional responses

Frustration
5
Confusion
7
Doubt
0
Surprise
5
Satisfaction
9
Delight
3
Confidence
0
Total29
before · dark
Sentiment

AI-detected emotional responses

Frustration
5
Confusion
7
Doubt
0
Surprise
5
Satisfaction
9
Delight
3
Confidence
0
Total29
after · dark
Sentiment

AI-detected emotional responses

Frustration
5
Confusion
7
Doubt
0
Surprise
5
Satisfaction
9
Delight
3
Confidence
0
Total29

A framework group with a subtitle (Bristlenose UXR Codebook ▸ Behaviour)

before · light
Behaviour

What people actually do

workaround
0
habit
0
avoidance
0
say-do gap
0
error recovery
0
exploration
0
after · light
Behaviour

What people actually do

workaround
0
habit
0
avoidance
0
say-do gap
0
error recovery
0
exploration
0
before · dark
Behaviour

What people actually do

workaround
0
habit
0
avoidance
0
say-do gap
0
error recovery
0
exploration
0
after · dark
Behaviour

What people actually do

workaround
0
habit
0
avoidance
0
say-do gap
0
error recovery
0
exploration
0

Where tags must not hang

Tags inline after other content, or not under text at all. Each was found in the live SPA.