Inline SVG Icons

Custom SVG icons embedded directly in HTML by render_html.py. All use stroke="currentColor" for CSS colour inheritance. These are the most "proper" icons in the system.

Search SVG
viewBox 0 0 16 16 • stroke 1.5
Toolbar search toggle button
Search clear SVG
viewBox 0 0 12 12 • stroke 1.5
Clear search input button
Codebook / external link SVG
viewBox 0 0 16 16 • stroke 1.5
Toolbar codebook button (opens new window)
Filter SVG
viewBox 0 0 16 16 • stroke 1.5
Toolbar tag filter button
Dropdown chevron SVG
viewBox 0 0 10 10 • stroke 1.5
View switcher + tag filter dropdown arrows
Copy / export SVG
viewBox 0 0 16 16 • stroke 1.5
Toolbar CSV export button
Hide / eye-slash SVG
viewBox 0 0 24 24 • stroke 2
Quote hide button (appears on hover)

Unicode Character Icons

Characters used as icons throughout the UI. Rendered via HTML entities in render_html.py or via textContent in JS modules. These are the ones most in need of replacement with proper SVG icons.

× × × ×   frustration ×
Delete / close CHAR
U+00D7 × (multiplication sign) • 7+ uses
Badge delete circles, modal close, search clear fallback
★ ★ ★ ★
Star (favourite) CHAR
U+2605 ★ (black star) • render_html.py
Quote star/favourite toggle button
✎ ✎ ✎ ✎
Edit (pencil) CHAR
U+270E ✎ (lower right pencil) • render_html.py
Quote edit button, name edit hint
← ← ← ←
Back arrow CHAR
U+2190 ← (leftwards arrow) • render_html.py
Transcript page "back to report" link
→ → → →
Journey arrow CHAR
U+2192 → (rightwards arrow) • render_html.py
User journey flow indicators
↩ ↩ ↩ ↩
Undo / restore CHAR
U+21A9 ↩ (leftwards arrow with hook) • render_html.py
Restore original text button (after editing)
♥ ♥ ♥ ♥
Heart CHAR
U+2661 ♡ (white heart suit) • render_html.py
Footer "made with" attribution
+ + + +
Add / plus CHAR
U+002B + (plus sign) • codebook.js, render_html.py
Add tag button ("+ add"), codebook new group card
▾ ▾ ▾ ▾
Dropdown chevron (text) CHAR
U+25BE ▾ (black down-pointing small triangle) • hidden.js
Hidden quotes badge dropdown toggle
— — —
Em dash (separator) CHAR
U+2014 — • names.js, render_html.py
Speaker attribution separator ("— p1")
· · ·
Middle dot (separator) CHAR
U+00B7 · • tag-filter.js, render_html.py
Inline metadata separator, tag filter active label

CSS Pseudo-element Icons

Characters rendered via CSS ::before / ::after pseudo-elements. These bypass the DOM entirely.

tag name × .badge-ai::after
AI badge delete circle PSEUDO
content: "\00d7" • atoms/badge.css
Delete AI-generated tags (appears on hover)
▶ closed ▼ open
Disclosure triangles PSEUDO
content: "▶" / "▼" • organisms/coverage.css
Coverage details toggle ("Show omitted segments")

Summary

Icon Glyph Type Uses Source Replaceable?
Search SVG 1 render_html.py Replace with icon set version
Search clear SVG 1 render_html.py Replace with icon set version
External link SVG 1 render_html.py Replace with icon set version
Filter SVG 1 render_html.py Replace with icon set version
Chevron down SVG 2 render_html.py Replace with icon set version
Copy / clipboard SVG 1 render_html.py Replace with icon set version
Eye-slash / hide SVG 1 render_html.py Replace with icon set version
Delete / close × CHAR 7+ CSS, JS, HTML Priority — most used icon, fragile centering
Star ★ CHAR 2 render_html.py Yes — filled/outline star from icon set
Pencil ✎ CHAR 3 render_html.py Yes — edit/pencil icon from icon set
Back arrow ← CHAR 1 render_html.py Yes — arrow-left from icon set
Journey arrow → CHAR 1 render_html.py Yes — arrow-right from icon set
Undo / restore ↩ CHAR 1 render_html.py Yes — undo/rotate-ccw from icon set
Heart ♥ CHAR 1 render_html.py Low priority — decorative only
Plus + CHAR 2 JS, HTML Yes — plus icon from icon set
Down triangle ▾ CHAR 1 hidden.js Yes — chevron-down from icon set
Disclosure ▶/▼ ▶ PSEUDO 1 coverage.css Yes — chevron-right/down from icon set

Migration plan