# HeyGoal contrast report · system 0.5.0

WCAG 2.1 AA: 4.5:1 for text, 3:1 for control edges, focus rings and marks. Each ratio is the worst case on --bg, --surface and --surface-2 of that theme. Colors made with relative color syntax are checked both gamut-mapped and clipped; the lower ratio is reported.

## Rules that hold for any accent

| Rule | Worst ratio over the sRGB cube | Needs |
|---|---|---|
| --accent-text, dark: OKLCH lightness at least 0.72 | 4.57:1 | 4.5:1 |
| --accent-text, light: lightness at most 0.5, chroma scaled with it | 4.61:1 | 4.5:1 |
| --accent-ring, dark: lightness at least 0.62 | 3.11:1 | 3:1 |
| --accent-ring, light: lightness at most 0.6, chroma scaled | 3.02:1 | 3:1 |
| --on-accent: --ink at lightness 0.585 and above, off-white below | 3.57:1 | 4.5:1 |

Fills between OKLCH lightness .53 and .64 reach 3.6–4.5:1. None of the 18 swatches is in that band (the lowest is coral at .67).

## Checks

| Group | Token | Theme | Ratio | Needs | Result | Note |
|---|---|---|---|---|---|---|
| Neutrals | --text | dark | 14.02:1 | 4.5:1 | Pass | Text |
| Neutrals | --muted | dark | 5.57:1 | 4.5:1 | Pass | Secondary text |
| Neutrals | --faint | dark | 3.07:1 | 3:1 | Pass | Marks and edges, never text |
| Neutrals | --line-strong | dark | 3.07:1 | 3:1 | Pass | Edges that identify a control |
| Neutrals | --line | dark | 1.16:1 | — | Exempt | Dividers and card edges: decorative |
| Status | --good-text | dark | 9.44:1 | 4.5:1 | Pass | On bg, surface, surface-2 |
| Status | --good-text on --good-soft | dark | 7.19:1 | 4.5:1 | Pass | Text on its own tint |
| Status | --good as a dot | dark | 7.81:1 | — | Exempt | Always beside its word, so the dot is not the only cue |
| Status | --warning-text | dark | 8.46:1 | 4.5:1 | Pass | On bg, surface, surface-2 |
| Status | --warning-text on --warning-soft | dark | 6.28:1 | 4.5:1 | Pass | Text on its own tint |
| Status | --warning as a dot | dark | 8.46:1 | — | Exempt | Always beside its word, so the dot is not the only cue |
| Status | --critical-text | dark | 5.62:1 | 4.5:1 | Pass | On bg, surface, surface-2 |
| Status | --critical-text on --critical-soft | dark | 4.65:1 | 4.5:1 | Pass | Text on its own tint |
| Status | --critical as a dot | dark | 4.96:1 | — | Exempt | Always beside its word, so the dot is not the only cue |
| Status | --info-text | dark | 10.51:1 | 4.5:1 | Pass | On bg, surface, surface-2 |
| Status | --info-text on --info-soft | dark | 7.42:1 | 4.5:1 | Pass | Text on its own tint |
| Status | --info as a dot | dark | 10.51:1 | — | Exempt | Always beside its word, so the dot is not the only cue |
| Neutrals | --text | light | 14.84:1 | 4.5:1 | Pass | Text |
| Neutrals | --muted | light | 4.67:1 | 4.5:1 | Pass | Secondary text |
| Neutrals | --faint | light | 3.09:1 | 3:1 | Pass | Marks and edges, never text |
| Neutrals | --line-strong | light | 3.09:1 | 3:1 | Pass | Edges that identify a control |
| Neutrals | --line | light | 1.2:1 | — | Exempt | Dividers and card edges: decorative |
| Status | --good-text | light | 5.43:1 | 4.5:1 | Pass | On bg, surface, surface-2 |
| Status | --good-text on --good-soft | light | 4.7:1 | 4.5:1 | Pass | Text on its own tint |
| Status | --good as a dot | light | 3:1 | — | Exempt | Always beside its word, so the dot is not the only cue |
| Status | --warning-text | light | 5.05:1 | 4.5:1 | Pass | On bg, surface, surface-2 |
| Status | --warning-text on --warning-soft | light | 4.73:1 | 4.5:1 | Pass | Text on its own tint |
| Status | --warning as a dot | light | 1.6:1 | — | Exempt | Always beside its word, so the dot is not the only cue |
| Status | --critical-text | light | 5.38:1 | 4.5:1 | Pass | On bg, surface, surface-2 |
| Status | --critical-text on --critical-soft | light | 4.69:1 | 4.5:1 | Pass | Text on its own tint |
| Status | --critical as a dot | light | 2.73:1 | — | Exempt | Always beside its word, so the dot is not the only cue |
| Status | --info-text | light | 4.84:1 | 4.5:1 | Pass | On bg, surface, surface-2 |
| Status | --info-text on --info-soft | light | 4.67:1 | 4.5:1 | Pass | Text on its own tint |
| Status | --info as a dot | light | 1.29:1 | — | Exempt | Always beside its word, so the dot is not the only cue |
| Palette | --ink on all 19 swatches | both | 5.55:1 | 4.5:1 | Pass | Lowest on coral |
| Palette | --ink-soft on all 19 swatches | both | 4.58:1 | 4.5:1 | Pass | 1.19.0 at .56: 3.32:1 on coral |
| Accent | Lime: --accent-text | dark | 11.27:1 | 4.5:1 | Pass | 1.19.0: 11.27:1 |
| Accent | Lime: --accent-text on --accent-soft | dark | 7.43:1 | 4.5:1 | Pass | Selected states |
| Accent | Lime: --accent-ring | dark | 11.27:1 | 3:1 | Pass | 1.19.0 outline: 11.27:1 |
| Accent | Lime: --on-accent on the fill | dark | 12.62:1 | 4.5:1 | Pass | 1.19.0 (--ink): 12.6:1 |
| Accent | Lime: --accent-text | light | 5.03:1 | 4.5:1 | Pass | 1.19.0: 4.75:1 |
| Accent | Lime: --accent-text on --accent-soft | light | 4.87:1 | 4.5:1 | Pass | Selected states |
| Accent | Lime: --accent-ring | light | 3.3:1 | 3:1 | Pass | 1.19.0 outline: 1.2:1 |
| Accent | Lime: --on-accent on the fill | light | 12.62:1 | 4.5:1 | Pass | 1.19.0 (--ink): 12.6:1 |
| Accent | Butter: --accent-text | dark | 11.84:1 | 4.5:1 | Pass | 1.19.0: 11.84:1 |
| Accent | Butter: --accent-text on --accent-soft | dark | 7.68:1 | 4.5:1 | Pass | Selected states |
| Accent | Butter: --accent-ring | dark | 11.84:1 | 3:1 | Pass | 1.19.0 outline: 11.84:1 |
| Accent | Butter: --on-accent on the fill | dark | 13.26:1 | 4.5:1 | Pass | 1.19.0 (--ink): 13.24:1 |
| Accent | Butter: --accent-text | light | 5.15:1 | 4.5:1 | Pass | 1.19.0: 4.57:1 |
| Accent | Butter: --accent-text on --accent-soft | light | 5.04:1 | 4.5:1 | Pass | Selected states |
| Accent | Butter: --accent-ring | light | 3.38:1 | 3:1 | Pass | 1.19.0 outline: 1.14:1 |
| Accent | Butter: --on-accent on the fill | light | 13.26:1 | 4.5:1 | Pass | 1.19.0 (--ink): 13.24:1 |
| Accent | Coral: --accent-text | dark | 5.93:1 | 4.5:1 | Pass | 1.19.0: 4.96:1 |
| Accent | Coral: --accent-text on --accent-soft | dark | 4.76:1 | 4.5:1 | Pass | Selected states |
| Accent | Coral: --accent-ring | dark | 4.96:1 | 3:1 | Pass | 1.19.0 outline: 4.96:1 |
| Accent | Coral: --on-accent on the fill | dark | 5.55:1 | 4.5:1 | Pass | 1.19.0 (--ink): 5.55:1 |
| Accent | Coral: --accent-text | light | 5.47:1 | 4.5:1 | Pass | 1.19.0: 8.28:1 |
| Accent | Coral: --accent-text on --accent-soft | light | 4.67:1 | 4.5:1 | Pass | Selected states |
| Accent | Coral: --accent-ring | light | 3.63:1 | 3:1 | Pass | 1.19.0 outline: 2.73:1 |
| Accent | Coral: --on-accent on the fill | light | 5.55:1 | 4.5:1 | Pass | 1.19.0 (--ink): 5.55:1 |
| Accent | Lilac: --accent-text | dark | 7.86:1 | 4.5:1 | Pass | 1.19.0: 7.86:1 |
| Accent | Lilac: --accent-text on --accent-soft | dark | 5.63:1 | 4.5:1 | Pass | Selected states |
| Accent | Lilac: --accent-ring | dark | 7.86:1 | 3:1 | Pass | 1.19.0 outline: 7.86:1 |
| Accent | Lilac: --on-accent on the fill | dark | 8.8:1 | 4.5:1 | Pass | 1.19.0 (--ink): 8.79:1 |
| Accent | Lilac: --accent-text | light | 5.22:1 | 4.5:1 | Pass | 1.19.0: 6.13:1 |
| Accent | Lilac: --accent-text on --accent-soft | light | 4.82:1 | 4.5:1 | Pass | Selected states |
| Accent | Lilac: --accent-ring | light | 3.44:1 | 3:1 | Pass | 1.19.0 outline: 1.72:1 |
| Accent | Lilac: --on-accent on the fill | light | 8.8:1 | 4.5:1 | Pass | 1.19.0 (--ink): 8.79:1 |
| Accent | Pale yellow: --accent-text | dark | 13.15:1 | 4.5:1 | Pass | 1.19.0: 13.15:1 |
| Accent | Pale yellow: --accent-text on --accent-soft | dark | 8.3:1 | 4.5:1 | Pass | Selected states |
| Accent | Pale yellow: --accent-ring | dark | 13.15:1 | 3:1 | Pass | 1.19.0 outline: 13.15:1 |
| Accent | Pale yellow: --on-accent on the fill | dark | 14.72:1 | 4.5:1 | Pass | 1.19.0 (--ink): 14.71:1 |
| Accent | Pale yellow: --accent-text | light | 5.13:1 | 4.5:1 | Pass | 1.19.0: 4.22:1 |
| Accent | Pale yellow: --accent-text on --accent-soft | light | 5.1:1 | 4.5:1 | Pass | Selected states |
| Accent | Pale yellow: --accent-ring | light | 3.37:1 | 3:1 | Pass | 1.19.0 outline: 1.03:1 |
| Accent | Pale yellow: --on-accent on the fill | light | 14.72:1 | 4.5:1 | Pass | 1.19.0 (--ink): 14.71:1 |
| Accent | Deep purple: --accent-text | dark | 6.06:1 | 4.5:1 | Pass | 1.19.0: 1.26:1 |
| Accent | Deep purple: --accent-text on --accent-soft | dark | 5.93:1 | 4.5:1 | Pass | Selected states |
| Accent | Deep purple: --accent-ring | dark | 4.1:1 | 3:1 | Pass | 1.19.0 outline: 1.26:1 |
| Accent | Deep purple: --on-accent on the fill | dark | 11.17:1 | 4.5:1 | Pass | 1.19.0 (--ink): 1.41:1 |
| Accent | Deep purple: --accent-text | light | 10.77:1 | 4.5:1 | Pass | 1.19.0: 15.27:1 |
| Accent | Deep purple: --accent-text on --accent-soft | light | 8.02:1 | 4.5:1 | Pass | Selected states |
| Accent | Deep purple: --accent-ring | light | 10.77:1 | 3:1 | Pass | 1.19.0 outline: 10.77:1 |
| Accent | Deep purple: --on-accent on the fill | light | 11.17:1 | 4.5:1 | Pass | 1.19.0 (--ink): 1.41:1 |
