Skip to content

fix(ascii): make the AI Config mark legible at the size it renders - #298

Merged
andraderaul merged 1 commit into
mainfrom
fix/ai-config-glyph
Aug 15, 2026
Merged

fix(ascii): make the AI Config mark legible at the size it renders#298
andraderaul merged 1 commit into
mainfrom
fix/ai-config-glyph

Conversation

@andraderaul

Copy link
Copy Markdown
Owner

Follow-up to #295, which flagged this as "renders as tofu". That diagnosis was wrong, and the
real one changes the fix.

(U+26BF SQUARED KEY) is not missing from the font. It draws correctly — it is simply a boxed
glyph whose meaning lives in fine interior detail, and at the 11px the header renders it at, the box
outline is all that survives. Pixel-compared against the .notdef box a browser draws for a glyph
it genuinely lacks:

34px 11px — what actually ships
.notdef empty rectangle empty rectangle
U+26BF rounded box with a small key inside — plainly different box, key gone — indistinguishable

So the bug is legibility at size, not coverage. and were rejected as replacements for
sharing exactly the same defect.

The mark

, hollow to AI Analyze's filled , so the program's two AI surfaces read as one family:

◈ scan & analyze     (AI Analyze)
◇ configure ai       (AI Config)

It is a bold silhouette rather than a boxed one — which is what the rest of the deck's alphabet
already is (◉ ● ⏹ ⇋ ✕ ⧉ ⟳), and what survives 11px. Zero emoji-presentation risk, unlike the
obvious semantic alternative (U+2699 takes colour emoji presentation on some platforms).

Two things that came with it

The mark is aria-hidden now, at both callsites — matching what the deck documents everywhere
else (ui/modal.tsx, IconLabelButton, preset-picker). Unhidden it had been joining the
accessible name, so a screen reader opened the header button with "squared key configure ai". It
is now "configure ai", pinned by a test.

The header button needs gap-2xs. Putting the mark in its own element to hide it also makes it
a flex item of the button's row, and flex drops the leading whitespace of the text item beside it —
the space that used to come free from a single text node. Caught in the browser, not in tests: the
DOM textContent still reads "◇ configure ai" either way. The modal heading is inline and needs
nothing.

Verified

Header and modal driven in Chrome. Accessible name resolves to configure ai; modal keeps its own
aria-label="AI configuration"; both marks report aria-hidden. Full suite green (2138 tests
across 5 workspaces), typecheck and Biome clean.

🤖 Generated with Claude Code

`⚿` (SQUARED KEY) was never missing from the font the way it looked. It
drew correctly -- it is simply a boxed glyph whose meaning lives in fine
interior detail, and at the 11px the header renders it at, the box outline
is all that survives. Pixel-compared against the .notdef box a browser
draws for a glyph it genuinely lacks: at 34px the two are plainly
different, at 11px they are not.

`◇` instead, hollow to AI Analyze's filled `◈`, so the program's two AI
surfaces read as one family. It is a bold silhouette rather than a boxed
one, which is what the rest of the deck's alphabet already is (`◉ ● ⏹ ⇋
✕ ⧉ ⟳`) and what survives 11px. Note `▣` and `⊞` were rejected for
sharing exactly the old glyph's defect.

The mark is `aria-hidden` at both callsites now, matching what the deck
documents everywhere else (`ui/modal.tsx`, `IconLabelButton`,
`preset-picker`). Unhidden, it had been joining the accessible name, so a
screen reader opened the header button with "squared key".

The button needs `gap-2xs` for the space it used to get free: putting the
mark in its own element to hide it also makes it a flex item of the
button's row, and flex drops the leading whitespace of the text item
beside it. The modal heading is inline and needs nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ascii-art-converter Ready Ready Preview Aug 2, 2026 3:21pm
atlas-sprawl Ready Ready Preview Aug 2, 2026 3:21pm
cyberdeck-golem Ready Ready Preview Aug 2, 2026 3:21pm
glitch-studio Ready Ready Preview Aug 2, 2026 3:21pm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant