Codex flagged: the previous version (ddf6580f) treated a NaN luminance — what `hexLuminance` returns when the bg color is still a `\$color-accent` ref because the doc's variables haven't been seeded — as a dark bg and painted white text. If the user's palette later resolves \$color-accent to a LIGHT hex (e.g. cream #FFE4B5), the white text becomes invisible on the light bg. Same risk in the inverted direction with the original code, which defaulted to dark text on unknown bg. Either guess can ship a visually broken button. Skip the contrast pass entirely when we can't resolve the bg ref to a hex — text / icon retain whatever fill they already carry, which is at least visible (the model's default text color, usually dark). A later post-pass invocation, after variables get seeded, re-runs and applies contrast cleanly with a real luminance value. `needsContrastOverride` already returns false when either luminance is non-finite, so the icon-override branch was already safe; only the text branch and the (now-removed) NaN→white default needed the fix. New regression test in role-resolver.test.ts covers the unseeded-ref case: explicit dark text fill on an unresolvable accent button survives untouched. |
||
|---|---|---|
| .. | ||
| public | ||
| server | ||
| src | ||
| CLAUDE.md | ||
| components.json | ||
| dev.ts | ||
| package.json | ||
| tsconfig.json | ||
| vite.config.ts | ||