deckhearth/components/ui
Randall Stillwell b41097b265 refactor(design-system): redesign-v2 refinements — tone down active/hover states + dedupe profile + seamless header
Operator feedback after the redesign-v2 epic shipped (PRs #102-#108):
the bold ember-gradient pill, the left-shifting hover, the duplicate
profile dropdown, and the divider below the header all read too
heavy. Four targeted refinements in one PR.

1. Move profile from sidebar bottom → TopSearchBar user-menu chip
   (top-right). The chip already existed (sub-convoy #3, PR #105);
   the sidebar's UserProfileDropdown was redundant. Removed from
   BOTH desktop sidebar and mobile drawer. Kept for logged-out
   visitors only (the top bar renders null when user is null, so
   the sidebar still surfaces the auth path via the existing
   Sign-in CTA branch).

2. Active state: bold ember-gradient pill → 1px ember border on
   transparent background.
   - styles/globals.css .nav-item-active: dropped the
     linear-gradient + 3-stop box-shadow glow. Now: transparent bg,
     accent-ember text color, inset 0 0 0 1px var(--accent-ember).
   - Dark theme variant uses a slightly hotter ember
     (rgb(255,138,80)) for eye-perception correction against the
     deep-navy substrate. AA contrast measured: 5.4:1 on dark
     navy bg, 4.6:1 on light cream bg — both pass 4.5:1 normal-
     text threshold.

3. Hover state: left-shifting border + transform → static
   transparent ember-tinted background.
   - Removed `border-left: 3px solid var(--accent-flame)` +
     `padding-left: calc(1rem - 3px)` on .nav-item-hover:hover
     (and focus-within). These were causing the 3px-width shift
     the operator called "movement with the left align."
   - Removed `transform: translateX(4px)` on .nav-item:hover and
     .nav-item-bottom:hover — the horizontal-jitter the operator
     also flagged.
   - Both classes now apply a flat `background-color:
     rgba(216, 67, 21, 0.08)` (light) / `rgba(255, 138, 80, 0.10)`
     (dark) on hover/focus-within with zero geometry shift.

4. TopSearchBar bottom divider removed.
   - styles change in components/ui/TopSearchBar.js: dropped the
     `0 1px 0 var(--border)` segment from the box-shadow
     composition. The rim-light-inner top highlight stays so the
     bar still reads as elevated chrome against the gradient body,
     but there's no longer a hairline below — page content flows
     visually seamlessly out of the header.

Test fix:
- test/components/Layout.test.js test #4 ("renders the supplied
  user email") asserted the FULL email `foo@bar.com`. The
  sidebar UserProfileDropdown used to render that; the TopSearchBar
  chip renders the username (or email's local-part as fallback) —
  `'foo'` for `foo@bar.com`. The assertion now checks for `'foo'`
  + retains the maintainer-email negative check. Renamed the
  test to "flows the supplied user through to the rendered
  surface (TopSearchBar chip)" with an inline comment explaining
  the shift; the three other P0 #7 regression-lock cases are
  unchanged and still pass.

Tests:
- npm run test:run: 113/113
- npm run lint: clean (1 pre-existing unused-disable warning)
- npm run build: green

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 11:43:39 -05:00
..
Button.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
CommandPaletteModal.js feat(design-system): redesign v2 #3 — TopSearchBar + Cmd+K + sweep page-header-glass (#105) 2026-06-04 11:14:50 -05:00
GlassSurface.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
index.js feat(design-system): redesign v2 #3 — TopSearchBar + Cmd+K + sweep page-header-glass (#105) 2026-06-04 11:14:50 -05:00
Input.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
Modal.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
SearchBar.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
StatCard.js feat(design-system): redesign v2 #4 — StatCard primitive + dashboard wiring (#104) 2026-06-04 10:59:53 -05:00
TopSearchBar.js refactor(design-system): redesign-v2 refinements — tone down active/hover states + dedupe profile + seamless header 2026-06-04 11:43:39 -05:00