Polish UI: copy, layout, accessibility, and theming#89
Merged
Conversation
Copy & docs
- Fix update-notification copy ("Update check complete", "You're already on
the latest version", consistent "Update" heading)
- Correct About license (MIT, not Apache 2.0); generate feature list from
the transformation registry instead of a stale hand list
- Refresh README/AGENTS to reflect the Vue 3 + Pinia stack
- Rename "Clear Input" to "Clear" since it clears both fields
- App title is just "Textonom" on Home; "Textonom — <tab>" elsewhere
Layout
- Settings rows use a 220px / 1fr grid so inputs line up across sections
- Drop the sticky-with-overflow-hidden conflict on the section title
- Reset uses an in-app confirm dialog (theme-correct) instead of window.confirm
- Reset reuses the store's defaultSettings (no duplicated defaults)
- Home cards get a single .transformation-card-content padding rule and
reserve room for the "✓ Open" badge so long titles no longer collide
- Title bar centers the app title (matching the window controls' width)
- Status bar shows In/Out char counts + theme + version instead of duplicating
the title-bar tab name
Accessibility
- All Settings inputs have associated labels (for/id pairs)
- Title-bar / close / tab-close get aria-labels and use real <button>s
- Home cards are keyboard-activatable (Enter/Space) with focus-visible ring
- Global :focus-visible outline + input focus ring
Theming
- New --textSecondary token in all themes; cyberpunk body text softened to
#d8f3ff so it's readable while cyan stays as accent
- Settings footer uses explicit .btn-primary / .btn-secondary instead of
:first-child color shifting per theme
UX
- Ctrl/Cmd+K focuses the home search box
- Ctrl/Cmd+Enter triggers the transform from the input textarea
- BaseTransformationPage shows the spinner only after 150ms (instant
transforms no longer flash a loader)
Tabs
- Density (compact/medium/wide) is a data-attribute on the container; CSS
drives max-width per density instead of imperative DOM mutation per render
- Tab close is a real <button>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A focused polish pass across copy, layout, accessibility, and theming — no behavioral changes to any transformation logic.
Copy & docs
Layout
220px / 1frgrid so inputs line up across all sections (previously each row's input edge sat at a different x)overflow:hiddenconflict on the section title that prevented stickingwindow.confirm(which broke the cyberpunk theme)defaultSettings(no more duplicated default values to drift).transformation-card-contentpadding rule, with reserved right-padding for the "✓ Open" badge so long titles ("Markdown to HTML", "JavaScript Formatter") no longer collide with the badgeAccessibility
<label for>/idpairs (clicking labels toggles checkboxes)aria-labels<div>to a real<button>aria-pressedand a focus-visible ring:focus-visibleoutline and a focus ring on inputsTheming
--textSecondarytoken in all themes (was referenced in CSS but never defined)#d8f3ff; cyan stays as accent — long copy is now readable.btn-primary/.btn-secondaryinstead of:first-childrules that color-shifted per themeUX
BaseTransformationPageshows the spinner only after 150ms — instant transforms no longer flash a loader (also removes the artificial 100ms post-transform delay)Tabs
data-densityattribute; CSS drives max-width per density. Removes per-render imperative DOM mutation that caused visible reflow<button>with anaria-labelTest plan
npm run type-check— passesnpm run lint— only pre-existing v-html warnings remainnpm run build— passes🤖 Generated with Claude Code