Contrast
Every pair an application actually ships, measured in APCA. Text on a card, a label on a filled button, a focus ring against the page. Most of these cross a family boundary, which is exactly where a per-family check cannot see.
Lc is APCA's lightness contrast, running from 0 to about 108. It is not a ratio and does not compare to WCAG's: 90 is the threshold for body text, 75 for larger body text, 60 for headlines, 45 for large or bold text, 30 for a non-text element that still has to be seen, and 15 is the floor at which anything is discernible at all.
The numbers below are measured in your browser, from the pixels this page is actually painted with — not read from a table. They are shown to four decimal places because that is what the palette is quantized to, so a pair that misses its target by a ten-thousandth says so rather than rounding to the number it missed. Expect the last decimal to differ from the compiler's: it measures its own values, this measures eight-bit pixels.
APCA contrast for every shipped pair| foreground | background | for | Lc | needs |
|---|
--nc-color-fg | --nc-color-surface | body text | — | 90 |
--nc-color-fg | --nc-color-surface-raised | body text on a card | — | 90 |
--nc-color-fg-muted | --nc-color-surface | secondary text | — | 60 |
--nc-color-on-accent | --nc-color-accent | label on a filled button | — | 45 |
--nc-color-ring | --nc-color-surface | focus ring | — | 30 |
--nc-color-border-strong | --nc-color-surface | strongest border | — | 15 |
--nc-color-accent | --nc-color-surface | accent as text | — | 45 |
--nc-color-danger | --nc-color-surface | a semantic fill | — | 30 |
--nc-color-fg | --nc-color-danger-bg | text inside a callout | — | 90 |
--nc-color-on-danger | --nc-color-danger | a fill's foreground | — | 30 |
--nc-color-danger-border | --nc-color-surface | a status border | — | 8 |
--nc-color-fg | --nc-color-surface-cool | body text | — | 90 |
APCA contrast for every shipped pair| foreground | background | for | Lc | needs |
|---|
--nc-color-fg | --nc-color-surface | body text | — | 90 |
--nc-color-fg | --nc-color-surface-raised | body text on a card | — | 90 |
--nc-color-fg-muted | --nc-color-surface | secondary text | — | 60 |
--nc-color-on-accent | --nc-color-accent | label on a filled button | — | 45 |
--nc-color-ring | --nc-color-surface | focus ring | — | 30 |
--nc-color-border-strong | --nc-color-surface | strongest border | — | 15 |
--nc-color-accent | --nc-color-surface | accent as text | — | 45 |
--nc-color-danger | --nc-color-surface | a semantic fill | — | 30 |
--nc-color-fg | --nc-color-danger-bg | text inside a callout | — | 90 |
--nc-color-on-danger | --nc-color-danger | a fill's foreground | — | 30 |
--nc-color-danger-border | --nc-color-surface | a status border | — | 8 |
--nc-color-fg | --nc-color-surface-cool | body text | — | 90 |
Computed live in the browser from the emitted tokens, using the same APCA implementation the compiler gates on.