Skip to content

Adopt frame-inspired design discipline - #47

Merged
robinbraemer merged 2 commits into
mainfrom
design/frame-inspired-polish
Aug 27, 2026
Merged

robinbraemer merged 2 commits into
mainfrom
design/frame-inspired-polish

Conversation

@robinbraemer

Copy link
Copy Markdown
Member

Selective adoption from the 66HEX/frame design evaluation (ideas only - frame is GPL-3.0, no code was viewed or copied; all values chosen independently). Wholesale adoption was rejected: frame's signature aesthetics conflict with named DESIGN.md rules.

  • A1: machine-checked palette contrast test (OKLCH->sRGB->WCAG in a pure vitest) locking FQ-18.5 for both themes; all current pairs pass (table in the test)
  • A2: DESIGN.md frontmatter/prose reconciled with the actually-shipped palette (they disagreed); documents that --ready currently aliases ink, mint is a future deliberate decision
  • A3: two-tier motion - new --interaction-motion: 90ms for hover/press tints, --state-motion: 180ms stays for layout/elevation
  • A4: --hairline token, 0.5px on Retina, restored to 1px under prefers-contrast: more; structural separators only
  • A5: 2px leading bar on selected model-menu options (selection no longer background-only)
  • A6: focus-restoration fallback hook - focus lost to removed DOM nodes returns to the composer/rail instead of body (FQ-18.2), with non-vacuous jsdom tests
  • B1: "Active Edge Light" inset highlight on focused composer and open popovers/dialogs only (Flat-Until-Active preserved); DESIGN.md Shadow Vocabulary extended
  • Fixes a latent bug: .capsule-install-dialog referenced an undefined --shadow-popover (shadow silently absent); also clears lint debt that was red on main

Evidence: lint/typecheck clean, 930 unit tests, full Playwright suite 94/94 on this branch, bundle gates pass (workspace CSS at 19,595/20,480 gzip - decoded headroom is thin at ~0.5 KiB, noted for future CSS work).

🤖 Generated with Claude Code

https://claude.ai/code/session_01VNmFXmRMNV98Hyd3xogUuK

robinbraemer and others added 2 commits August 27, 2026 19:48
- Add a WCAG contrast gate for the shipped OKLCH palette: parses the light
  and dark custom-property blocks in src/styles.css, resolves semantic alias
  chains, and converts OKLCH to sRGB with self-contained color math. All
  measured ratios pass (ink >= 14.4:1, muted >= 6.9:1, danger >= 4.7:1).
- Reconcile DESIGN.md frontmatter and color/shadow prose with the shipped
  shadcn-neutral palette (dark values canonical, light noted inline).
- Introduce a two-tier motion vocabulary: 90ms --interaction-motion for
  small-control hover/press tints, 180ms --state-motion for layout and
  elevation. Both collapse under prefers-reduced-motion.
- Render structural separators at 0.5px on 2dppx+ displays via a --hairline
  token, restored to 1px under prefers-contrast: more.
- Reinforce the selected model row with a 2px leading bar (::before, so the
  focus ring survives) beside the existing background and check signals.
- Add an Active Edge Light: a 0.5px inset top highlight on the focused
  composer and open popovers/menus only, documented in DESIGN.md. Fixes the
  undefined --shadow-popover reference on the capsule install dialog.
- Restore focus to the composer (or rail header/reopen control) when the
  focused element inside the shell is removed by a canvas update, without
  stealing focus that legitimately moved elsewhere; covered by jsdom tests.
- Fix preexisting lint debt: unused imports in workspace-controller and a
  descending-specificity warning for .capsule-surface.

Claude-Session: https://claude.ai/code/session_01VNmFXmRMNV98Hyd3xogUuK
@robinbraemer
robinbraemer merged commit 4d0c114 into main Aug 27, 2026
5 checks passed
@robinbraemer
robinbraemer deleted the design/frame-inspired-polish branch August 28, 2026 08:54
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