Skip to content

Design polish: settings spacing, focus rings, tagline placement - #47

Merged
BrandonML merged 10 commits into
mainfrom
claude-design-improvements
Sep 18, 2026
Merged

BrandonML merged 10 commits into
mainfrom
claude-design-improvements

Conversation

@BrandonML

Copy link
Copy Markdown
Owner

Summary

Implements the approved design handoff (design_handoff_tabby_polish/README.md, now removed) covering three linked issues:

  • Improve UI, spacing, and layout of settings view #30 — Settings view spacing + floating label + input group (option 30b). Adds a subhead under "Your Location" and a hint line below the zip field so spacing comes from content instead of margin tuning, restyles the zip field as a Bootstrap-style floating label, and joins the input with Save into one bordered control with a single seam.
  • Remove Font Family 'Inter' References #42 — Drops the un-loaded Inter from the font stack; it was never shipped, so this is a no-op visually and just makes the CSS honest.
  • Reposition tagline, make more noticable #25 — Moves the tagline out of the footer and beside the wordmark in a .brand flex container, sharing a baseline, with a hairline divider between them. Drops out below 460px so the header row never crowds.
  • Also adds focus-visible rings (moss outline, inset for controls that would otherwise get clipped by a rounded/overflow: hidden parent) and eased hover transitions across buttons, .profile links, and anchors, respecting prefers-reduced-motion.

While implementing the design spec, I found and fixed three latent issues it would have introduced or left in place:

  • .location-panel p's specificity was silently overriding the new .panel-sub/.field-hint/.or-divider margins — scoped the new rules through .location-panel so they actually apply, without touching the generic rule (#saved still needs it).
  • The zip field's overflow: hidden (needed to clip Save's square corner to the shared radius) would also clip a :focus-visible ring on Save — gave it the same inset-ring treatment as the share-menu items.
  • The spec's target markup added literal <span> divider lines while the existing CSS still drew them via ::before/::after, which would have rendered four line segments — switched to styling the real spans and dropped the pseudo-elements.

Existing zip validation (maxlength, pattern) and all JS-side id/handler wiring are unchanged.

Test plan

  • npm test — 220/220 passing, including two new regression tests for the fragile floating-label DOM structure (Improve UI, spacing, and layout of settings view #30) and the header/footer restructuring (Reposition tagline, make more noticable #25)
  • Manually verified in-browser: floating label rest/focus/blur states, focus-within ring around the joined zip group, keyboard-focus inset ring on Save (not clipped), single divider line, header stays one row with tagline+divider dropping out below 460px, footer no longer duplicates the tagline

Closes #30, #25, #42.

BrandonML and others added 7 commits September 18, 2026 10:45
Inter was declared first in the font-family stack but never shipped
(only fraunces.woff2 loads), so it silently fell through to the
system-ui fallback for virtually every user anyway. Closes #42.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Buttons, .profile links, and anchors get a moss focus-visible ring
(not :focus, so mouse clicks don't leave one behind) and ease their
hover states instead of snapping. Share-menu items get an inset ring
since they sit flush inside a padded rounded container where an
outset ring would get clipped. Respects prefers-reduced-motion.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a subhead under "Your Location" and a hint line below the zip
field so the panel's spacing comes from content instead of margin
fine-tuning, restyles the zip field as a Bootstrap-style floating
label, and joins the input with Save into a single bordered control
with one dividing seam instead of two separate-looking pieces.

While wiring this up, fixed two pre-existing issues the new markup
would otherwise have exposed or introduced:
- .location-panel p (class+type selector) has higher specificity than
  a same-context single class, so it was already silently overriding
  the intended margins here -- scoped the new spacing rules through
  .location-panel to actually take effect, without touching the
  generic rule itself (#saved still needs it).
- The zip field's overflow:hidden (needed to clip Save's square
  corners to the shared border-radius) would also clip a
  :focus-visible ring on Save, the same way item 2's share-menu items
  needed an inset ring instead of an outset one. Gave Save the same
  inset-ring treatment so keyboard focus stays visible.

Also switched the "or" divider from ::before/::after pseudo-elements
to real span elements per the design spec, since keeping both would
have rendered four line segments instead of two.

Closes #30.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Wraps the wordmark, a hairline divider, and the tagline in a .brand
flex container as the header's first child, sharing a baseline so the
italic tagline doesn't hang below the wordmark. Removed from the
footer, which now starts with the credit line. Below 460px -- the one
width where this row can crowd -- the rule and tagline drop out and
the header returns to today's layout.

Closes #25.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The floating-label pattern in #30 explicitly breaks silently if the
placeholder, sibling order, or wrapper nesting drift, and #25 could
regress back to a duplicated tagline in the footer -- pin both down.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Scoping/reference material only, no longer needed now that #25, #30,
and #42 are implemented.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
BrandonML and others added 3 commits September 18, 2026 11:48
maxlength/pattern only catch a bad ZIP at validation time, after
submit -- a user could still type or paste letters/symbols into the
field itself. Filtering on input is a better UX than letting them in
and then rejecting the value.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Also updates the CWS listing's version history table, and fixes the
screenshot-capture harnesses (screenshot-frame.source.html,
screenshot-frame-options.source.html), which hand-copy newtab.html/
options.html's markup rather than loading the real files -- they still
had the pre-#25/#30 header, footer, and settings-panel structure, so
screenshots recaptured off the old copies would have silently shown
the old design. Screenshots 1 (main card), 3 (first-run), 4
(settings), and 5 (fee-tags) include the header and/or footer in
their crop and should be regenerated before this version is submitted
to either store; 2 (explore) and 6 (share) crop the header out of
frame and are unaffected.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Recaptured all 6 screenshots at 1280x800 via the now-fixed
screenshot-frame(-options).source.html harnesses, using chrome-devtools-mcp
against the real newtab.css/newtab.js/options.js unmodified (same
capture method as the originals -- see cws/CHROMEWEBSTORE.md's
Screenshot Notes). 1, 3, 4, and 5 visibly change (header now shows the
tagline beside the wordmark; the settings panel shows the new floating
label + joined Save group); 2 and 6 crop the header out of frame and
are byte-different but not visibly different -- recaptured anyway for
consistency now that the harness matches the real markup.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@BrandonML
BrandonML merged commit 92e663d into main Sep 18, 2026
1 check passed
@BrandonML
BrandonML deleted the claude-design-improvements branch September 18, 2026 16:25
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.

Remove Font Family 'Inter' References Improve UI, spacing, and layout of settings view Reposition tagline, make more noticable

1 participant