The notification bell sat higher and larger than search and the theme
toggle next to it. The cause was not the glyph: `.notifications-bell__button`
carried its own rules with neither flex centring nor an icon size, so the
svg was laid out inline on the text baseline and rendered at lucide's
24px default instead of the 1.15rem the shared `.icon-button` enforces.
Route every icon-only control through the shared components instead:
- `IconLink` joins `IconButton`, sharing one class helper. Three controls
navigate (pond settings, graph, trash) and are links, not buttons —
without a link twin they would have stayed the one group gluing the
class on by hand.
- 17 hand-applied `className="icon-button …"` usages across nine files
now go through the components, which is what enforces the accessible
name on a control that shows only an icon.
- The bell's unread count reaches assistive technology. The badge sits
inside the control, so `aria-label` hid it and a screen reader
announced "Notifications" without ever saying how many.
An ESLint rule keeps it that way: `icon-button` on a raw button, anchor
or Link is now an error, in both string and template-literal form.
The plugin uninstall button keeps a title that differs from its name (it
explains why a required plugin is locked); IconButton spreads rest last,
so the explicit title still wins.
Also drops the graphify block from CLAUDE.md — it duplicates the
workspace-level instructions.
Jede künftige UI-Änderung entwickelt Barrierefreiheit direkt mit
(Stefans Vorgabe nach Abschluss des WCAG-2.1-AA-Audits): verbindliche
Checkliste als ADR, Kurzfassung in CLAUDE.md für jede Dev-Session,
Eintrag im ADR-Index.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGM8jo3hwoV9wsCVGfy8iq
`graphify claude install` im Monorepo: graphify-Abschnitt an (neue)
CLAUDE.md angehängt und PreToolUse-Hooks in .claude/settings.json
registriert (Graph-Check vor Such-/Lesetools, Auto-Rebuild nach
Code-Änderungen). Der generierte graphify-out/ (AST-Graph über 741
Code-Dateien, ~10 MB) wird nicht versioniert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0155v2aT8AG1kZDQEZiCLBWC