# Contrast report Generated contrast ratios for every foreground and surface pair in the brand tokens; do not edit by hand. - Page: - Updated: 2026-10-23 - From the Sri Guru Granth Sahib Ji — Knowledge Base wiki. Sri Guru Granth Sahib Ji is quoted verbatim, cited by Ang, and never altered. --- Generated by `scripts/brand/contrast_report.py` from `tokens.json`. Do not edit by hand. ## Required pairs | Foreground | On | Min | light | dark | lightHC | darkHC | Result | |---|---|---|---|---|---|---|---| | `soul.accentText` | `canvas` | 4.5 | 4.96 | 11.06 | 7.99 | 11.95 | pass | | `soul.accentText` | `card` | 4.5 | 5.54 | 10.25 | 9.50 | 11.07 | pass | | `soul.accentText` | `paper` | 4.5 | 5.19 | 10.87 | 9.50 | 12.51 | pass | | `soul.accentText` | `paperWarm` | 4.5 | 5.14 | 10.87 | 9.50 | 12.51 | pass | | `soul.accent` | `card` | 3.0 | 3.89 | 10.25 | 5.54 | 11.07 | pass | | `soul.accent` | `paper` | 3.0 | 3.64 | 10.87 | 5.54 | 12.51 | pass | | `soul.accent` | `paperWarm` | 3.0 | 3.61 | 10.87 | 5.54 | 12.51 | pass | | `soul.onAccent` | `soul.accentFill` | 4.5 | 9.94 | 9.94 | 5.54 | 10.74 | pass | | `soul.onAccent` | `soul.accentDeep` | 4.5 | 9.68 | 5.54 | 7.63 | 7.28 | pass | | `brand.onRed` | `brand.red` | 4.5 | 4.87 | 4.87 | 6.88 | 4.87 | pass | | `brand.maroon` | `canvas` | 4.5 | 8.38 | 5.68 | 9.97 | 8.07 | pass | | `brand.maroon` | `card` | 4.5 | 9.35 | 5.26 | 11.84 | 7.47 | pass | | `brand.maroon` | `paper` | 4.5 | 8.76 | 5.59 | 11.84 | 8.44 | pass | | `brand.maroon` | `paperWarm` | 4.5 | 8.67 | 5.59 | 11.84 | 8.44 | pass | | `status.positive` | `canvas` | 4.5 | 5.41 | 9.04 | 7.18 | 10.97 | pass | | `status.positive` | `card` | 4.5 | 6.04 | 8.37 | 8.53 | 10.16 | pass | | `status.positive` | `paper` | 4.5 | 5.66 | 8.89 | 8.53 | 11.48 | pass | | `status.positive` | `paperWarm` | 4.5 | 5.60 | 8.89 | 8.53 | 11.48 | pass | | `status.negative` | `canvas` | 4.5 | 5.44 | 7.33 | 7.06 | 9.24 | pass | | `status.negative` | `card` | 4.5 | 6.08 | 6.79 | 8.39 | 8.56 | pass | | `status.negative` | `paper` | 4.5 | 5.69 | 7.20 | 8.39 | 9.67 | pass | | `status.negative` | `paperWarm` | 4.5 | 5.63 | 7.20 | 8.39 | 9.67 | pass | | `status.info` | `canvas` | 4.5 | 5.05 | 8.49 | 6.42 | 10.73 | pass | | `status.info` | `card` | 4.5 | 5.64 | 7.86 | 7.63 | 9.94 | pass | | `status.info` | `paper` | 4.5 | 5.28 | 8.34 | 7.63 | 11.23 | pass | | `status.info` | `paperWarm` | 4.5 | 5.22 | 8.34 | 7.63 | 11.23 | pass | | `status.special` | `canvas` | 4.5 | 6.04 | 7.92 | 7.63 | 10.33 | pass | | `status.special` | `card` | 4.5 | 6.74 | 7.34 | 9.06 | 9.57 | pass | | `status.special` | `paper` | 4.5 | 6.32 | 7.79 | 9.06 | 10.81 | pass | | `status.special` | `paperWarm` | 4.5 | 6.25 | 7.79 | 9.06 | 10.81 | pass | | `themeGroup.divine` | `canvas` | 4.5 | 5.40 | 8.86 | 7.25 | 11.15 | pass | | `themeGroup.divine` | `card` | 4.5 | 6.03 | 8.21 | 8.62 | 10.33 | pass | | `themeGroup.divine` | `paper` | 4.5 | 5.65 | 8.71 | 8.62 | 11.67 | pass | | `themeGroup.divine` | `paperWarm` | 4.5 | 5.59 | 8.71 | 8.62 | 11.67 | pass | | `themeGroup.condition` | `canvas` | 4.5 | 6.34 | 9.34 | 8.37 | 11.65 | pass | | `themeGroup.condition` | `card` | 4.5 | 7.08 | 8.65 | 9.95 | 10.79 | pass | | `themeGroup.condition` | `paper` | 4.5 | 6.63 | 9.18 | 9.95 | 12.19 | pass | | `themeGroup.condition` | `paperWarm` | 4.5 | 6.56 | 9.18 | 9.95 | 12.19 | pass | | `themeGroup.vices` | `canvas` | 4.5 | 6.35 | 8.98 | 8.29 | 11.45 | pass | | `themeGroup.vices` | `card` | 4.5 | 7.09 | 8.32 | 9.85 | 10.61 | pass | | `themeGroup.vices` | `paper` | 4.5 | 6.64 | 8.82 | 9.85 | 11.99 | pass | | `themeGroup.vices` | `paperWarm` | 4.5 | 6.57 | 8.82 | 9.85 | 11.99 | pass | | `themeGroup.path` | `canvas` | 4.5 | 5.62 | 9.90 | 7.52 | 11.89 | pass | | `themeGroup.path` | `card` | 4.5 | 6.27 | 9.17 | 8.94 | 11.01 | pass | | `themeGroup.path` | `paper` | 4.5 | 5.87 | 9.73 | 8.94 | 12.44 | pass | | `themeGroup.path` | `paperWarm` | 4.5 | 5.81 | 9.73 | 8.94 | 12.44 | pass | | `themeGroup.virtues` | `canvas` | 4.5 | 5.73 | 10.94 | 7.56 | 12.92 | pass | | `themeGroup.virtues` | `card` | 4.5 | 6.39 | 10.14 | 8.98 | 11.97 | pass | | `themeGroup.virtues` | `paper` | 4.5 | 5.99 | 10.76 | 8.98 | 13.52 | pass | | `themeGroup.virtues` | `paperWarm` | 4.5 | 5.93 | 10.76 | 8.98 | 13.52 | pass | | `themeGroup.states` | `canvas` | 4.5 | 5.61 | 9.93 | 7.27 | 12.19 | pass | | `themeGroup.states` | `card` | 4.5 | 6.26 | 9.20 | 8.64 | 11.29 | pass | | `themeGroup.states` | `paper` | 4.5 | 5.86 | 9.77 | 8.64 | 12.75 | pass | | `themeGroup.states` | `paperWarm` | 4.5 | 5.80 | 9.77 | 8.64 | 12.75 | pass | | `ink.muted` | `paper` | 4.5 | 6.51 | 9.89 | 9.72 | 12.31 | pass | | `ink.muted` | `paperWarm` | 4.5 | 6.44 | 9.89 | 9.72 | 12.31 | pass | ## Forbidden uses (light leg must stay below the threshold) | Foreground | On | Light ratio | Threshold | Why | |---|---|---|---|---| | `soul.accentFill` | `card` | 1.69 | < 3.0 | brand gold is never text or an unbordered fill in light mode | | `soul.accentFill` | `paper` | 1.58 | < 3.0 | brand gold is never text or an unbordered fill in light mode | | `brand.kraft` | `card` | 2.65 | < 4.5 | kraft is decorative only | | `brand.kraft` | `paper` | 2.48 | < 4.5 | kraft is decorative only | | `brand.red` | `canvas` | 4.36 | < 4.5 | brand red is fill-only; Ink.negative is the text red | ## Web theme (frontend/src/theme.ts) — informational | Pair | Light | Dark | |---|---|---| | accentText on paper | 5.19 | 10.87 | | accentText on card | 5.54 | 10.25 | | ink on paper | 16.15 | 15.59 | | onAccent on accentFill | 9.94 | 9.94 |