Skip to content

v1.6.0 — dark-mode link contrast fix (#58) + info-fg defer (#59)

Choose a tag to compare

@yutaro-shirai yutaro-shirai released this 13 Jun 06:17
· 69 commits to main since this release

Lockstep MINOR — 4 npm packages → 1.6.0 (@willink-labs/tokens · tailwind-preset · react · css-tokens). No Flutter release this cycle (willink_theme stays 1.5.0 — independent cadence, ADR-0011).

Button link dark contrast fix (#58)

Button variant="link" resting color used text-brand — the fixed brand-600 primitive, which is mode-invariant (ADR-0013) — so on the dark page background it rendered 3.54:1, below WCAG AA. Reproduced by the i-willink.com production sweep on /design-system. Re-pointed to the flipping text-brand-soft-fg (light brand-700 7.10:1 / dark brand-300 10.93:1 — both AAA). Hover (text-brand-hover) already flips and stays legible (dark 4.76:1).

The same bug class (fixed brand foreground on a flipping surface) was audited DS-wide: AccordionTrigger hover:text-brandhover:text-brand-hover (also fixed); RadioGroupItem text-brand audited and kept (8px indicator dot is a graphical object under WCAG 1.4.11's 3:1 rule, which it clears). The contrast gate gained two required pairs (brand-soft-fg/bg, brand-hover/bg) in both modes.

Light-mode resting links are now one ramp step darker (brand-600 → brand-700) — a deliberate, contrast-improving MINOR default-visual change (ADR-0010). No migration required.

info-fg upstreaming verdict (#59) — deferred

Evaluated i-willink.com's local --color-info-fg (blue) for upstreaming. Verdict NO this cycle: single usage site, no info hue/surface family in the DS for it to belong to, below the ADR-0016 promote-on-reproduction bar. #59 left open with the reasoning as a comment — a defer, not a reject.

Decisions

ADR-0017 — Button link fix rationale (both fix options weighed) + info-fg defer verdict. Roadmap: docs/roadmap/v1.7.md.

Packages

Real content in @willink-labs/react; tokens / tailwind-preset / css-tokens carry lockstep markers (the fix reuses existing roles — no new token, variable, safelist entry, or generated var).