Skip to content

fix(web-standalone): product-bar follow-up from the #146 review - #150

Merged
khagele merged 1 commit into
mainfrom
fix/product-bar-followup
Sep 30, 2026
Merged

khagele merged 1 commit into
mainfrom
fix/product-bar-followup

Conversation

@khagele

@khagele khagele commented Sep 30, 2026

Copy link
Copy Markdown
Collaborator

Closes #149

Follow-up to #146 from two code-review passes over its merge. One PR because every item sits in web-standalone/index.html.

User-visible

  • Primary is a role class, .button-primary, next to .button-secondary and .button-muted. The bare .step-panel button primary forced every other button in a panel to out-specify it; the Step 1 entry tabs never reset its min-height and stood 38px tall. The tabs, step heads, candidate cards and import row lose their exemption rules; the intro's "Got it" uses the class instead of a copy of the rule.
  • Primaries and secondaries get 8px vertical padding for labels that wrap in the 300px column.
  • The brand title opens dutchmeshcore.nl in a new tab like every other outbound link in the bar.
  • Language and theme menus are plain disclosures like the apps menu: aria-expanded + aria-controls on the trigger, aria-pressed on the chosen option, no role="menu" without the arrow-key handling it promises.

AGENTS.md

  • Dropdowns open and close through the hidden attribute instead of an .open class flipping display.
  • #ffffff on the primaries becomes var(--on-accent). Not --white: #f4f4f5 on the fill is 4.27:1, under AA; pure white is 4.7:1.

Dead code and stale comments

  • The first .topbar .dd-trig, .topbar-meta .is-icon block and its hover were overridden wholesale by the quiet-role rule; only sizing and the mono face remain.
  • .controls-card button.is-icon (matched nothing since Adopt the shared DMC product bar #142), the tokens --bar-h, --bar-bg, --heading-shadow and the three opacity tokens with the body::before/::after layers behind them are gone.
  • Comments for the deleted topbar z-index, the heading shadow and the phone bar now match the code. The resize listener for syncNavHeight only registers without ResizeObserver.

Verification (Chromium, 1280px and 375px, against main with the same fonts)

main this PR
Step 1 tabs 38px 28px
Wrapped label at 170px 42px, 0 inset 58px, 8px inset
Step heads 53px 53px

All three dropdowns open, swap, close on Escape and outside click; theme switch to light and back; no console errors. pytest web-standalone/tests: 13 passed. accuracy.mjs --hop1-only against main: 85 unchanged (no estimator change).

🤖 Generated with Claude Code

Two review passes over the merge of #146 found a handful of things that
all sit in the same file, so they go in one PR.

User-visible

- The primary button was the bare `.step-panel button`, so every other
  button in a panel had to out-specify it. The Step 1 entry tabs never
  reset its min-height and stood 38px tall instead of 28px. Primary is a
  class now (`.button-primary`, next to `.button-secondary` and
  `.button-muted`), the tabs, step heads, candidate cards and import row
  lose their exemption rules, and the intro's "Got it" uses the same
  class instead of a copy of the rule.
- Primaries and secondaries get 8px vertical padding: a label that wraps
  in the 300px column was 42px tall with the text flush against both
  edges; it is 58px with the inset now.
- The brand title opens dutchmeshcore.nl in a new tab like every other
  outbound link in the bar. It is where a click lands mid-resolve, and
  the page's state is not saved.
- The language and theme menus kept role="menu" and menuitemradio without
  the arrow-key handling those roles promise, while the apps menu had
  dropped them for that reason. All three are plain disclosures now:
  aria-expanded plus aria-controls on the trigger, aria-pressed on the
  chosen option.

AGENTS.md

- The dropdowns open and close through the `hidden` attribute instead of
  an `.open` class flipping display.
- `#ffffff` on the primaries becomes `var(--on-accent)`. Not `--white`:
  #f4f4f5 on the fill is 4.27:1, under AA; pure white is 4.7:1.

Dead code and stale comments

- The first `.topbar .dd-trig, .topbar-meta .is-icon` block and its hover
  were overridden wholesale by the quiet-role rule later at equal
  specificity; only the sizing and the mono face survive.
- `.controls-card button.is-icon` matched nothing since #142.
- Tokens nothing read: --bar-h, --bar-bg, --heading-shadow, and the three
  opacity tokens behind body::before/::after, which painted nothing at
  opacity 0 but were still composited with a mask and a blend mode.
- The comment for the deleted `.topbar { z-index: 2 }` moves to the shell
  rule it was about; the heading and phone-bar comments now match the
  code.
- The window resize listener for syncNavHeight only registers when there
  is no ResizeObserver.

Verified in Chromium at 1280px and 375px against main with the same
fonts: tabs 38 -> 28px, wrapped label 42px/0 inset -> 58px/8px, step heads
53px both, all three dropdowns open, swap, close on Escape and outside
click, theme switch to light and back, no console errors. pytest 13
passed; accuracy harness --hop1-only 85 unchanged against main.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H6fJpaq2uZ94Z2FW53yGtR
@khagele
khagele merged commit 638a243 into main Sep 30, 2026
2 checks passed
@khagele
khagele deleted the fix/product-bar-followup branch September 30, 2026 17:40
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.

Product-bar follow-up: primary-button leak, brand link, CSS leftovers (post #146)

2 participants