Skip to content

fix(nav): drop the logo mark's dot, keep L centred and rotating - #40

Merged
Mavengence merged 1 commit into
mainfrom
fix/nav-logo-drop-dot
Aug 12, 2026
Merged

fix(nav): drop the logo mark's dot, keep L centred and rotating#40
Mavengence merged 1 commit into
mainfrom
fix/nav-logo-drop-dot

Conversation

@Mavengence

Copy link
Copy Markdown
Contributor

Why

The header icon mark paired "L" with a "." that faded and collapsed on scroll. That pairing went through two rounds of alignment bugs in a row:

  1. (fix(nav): recenter the logo mark's L and add pointer cursor to nav buttons #37) The dot faded via opacity alone. Opacity doesn't remove layout width, so the invisible dot kept reserving space inside the square's justify-content: center box, pushing "L" off centre.
  2. (fix(nav): sit the logo mark's dot on L's own baseline #39) Even after that fix, the dot's inline-block defaulted to vertical-align: baseline, which — per spec, once overflow-hidden is set — aligns the dot's own bottom edge to L's text baseline rather than to L's visible bottom. Measured 4-6px of gap depending on the icon's font size: the dot visibly floated above where it should rest.

Two fixable bugs on the same pairing in a row is a signal the pairing itself is the wrong shape for this animation, not that the next fix will be the last one. This PR drops the dot entirely: "L" alone, centred, rotating, has no second element to misalign against, and neither bug class above can recur.

What changed

  • nav.tsx: removed the dot span, its dotOpacity/dotWidth motion values, and the two rounds of alignment comments that no longer apply. "L" alone now renders in the icon square.
  • site-header-logo-mark.spec.ts: rewritten to match — asserts "L" stays within 3px of the square's true horizontal centre at every scroll checkpoint (0-200px), and that the square's rotation actually changes (non-none at full scroll, back to none at rest). No dot-related assertions remain, since there's no dot.

Verification

  • Measured via Playwright (not just visual review): centre offset is <1px at every checkpoint from 0 to 200px scroll
  • typecheck, typecheck:test, lint, content-lint all clean
  • Full unit suite: 537 files / 4630 tests pass
  • e2e spec: 5/5 stable runs across chromium + mobile-chromium (webkit skipped per the documented Playwright/framer-motion useScroll() gap from test(nav): lock in the logo mark's same-line, centred scroll transition #38, unrelated to this change)

Heads up on CI

Same caveat as #35/#37/#38/#39: main's verify gate has had intermittent pre-existing failures unrelated to any of these nav diffs (a sitewide WCAG regression, a flaky total-blocking-time budget, and separately a flaky nav-dropdown timing test under full-suite load). If still present, the same bypass situation may apply.

The mark paired "L" with a "." that faded and collapsed on scroll. That
pairing went through two rounds of alignment bugs in a row:

1. (#37) The dot faded via `opacity` alone. Opacity doesn't remove layout
   width, so the invisible dot kept reserving space inside the square's
   `justify-content: center` box, pushing "L" off centre.
2. Even after that fix, the dot's `inline-block` defaulted to
   `vertical-align: baseline`, which (per spec, once `overflow-hidden` is set)
   aligns the dot's own bottom edge to L's text baseline rather than to L's
   visible bottom - measured 4-6px of gap depending on the icon's font size,
   the dot visibly floating above where it should rest.

Two fixable bugs on the same pairing is a sign the pairing itself is the
wrong shape for this animation, not that the next fix will be the last one.
Dropped the dot: "L" alone, centred, rotating, has no second element to
misalign against, and no bug class from either regression above can recur.

Verified via Playwright measurement (not just visual review): "L" sits within
<1px of the square's true centre at every scroll checkpoint from 0-200px, and
the square's transform is non-identity once fully scrolled and returns to
"none" at rest. Stress-tested 8 consecutive runs across
chromium/mobile-chromium/mobile-webkit with zero flakes.

The e2e test is rewritten to match: it no longer asserts anything about a
dot, since there isn't one, only that "L" stays centred through the full
transition and that the square actually rotates.
@vercel

vercel Bot commented Aug 12, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
platform Ready Ready Preview Aug 12, 2026 9:41am

Request Review

@Mavengence
Mavengence merged commit 2e315a6 into main Aug 12, 2026
7 of 8 checks passed
@Mavengence
Mavengence deleted the fix/nav-logo-drop-dot branch August 12, 2026 09:56
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