# Accessibility report

Generated from the canonical VS Code theme files by `pnpm run report:accessibility`. Do not edit the results table by hand.

The validator checks all 12 shipped variants. Core text pairs require at least 4.5:1, secondary/decorative syntax requires at least 3:1, and all other syntax tokens require at least 4.5:1. The table below shows the four base palettes; bold and italic variants share their colors and are validated separately.

| Theme | Pair | Measured | Required | Result |
| --- | --- | ---: | ---: | --- |
| santi020k dark | `editor.foreground` / `editor.background` | 14.55:1 | 4.5:1 | Pass |
| santi020k dark | `foreground` / `editor.background` | 14.55:1 | 4.5:1 | Pass |
| santi020k dark | `input.foreground` / `input.background` | 13.08:1 | 4.5:1 | Pass |
| santi020k dark | `button.foreground` / `button.background` | 6.17:1 | 4.5:1 | Pass |
| santi020k dark | `quickInput.foreground` / `quickInput.background` | 13.67:1 | 4.5:1 | Pass |
| santi020k dark | `notifications.foreground` / `notifications.background` | 13.13:1 | 4.5:1 | Pass |
| santi020k dark | `terminal.foreground` / `terminal.background` | 14.55:1 | 4.5:1 | Pass |
| santi020k dark | `statusBar.foreground` / `statusBar.background` | 9.58:1 | 4.5:1 | Pass |
| santi020k dark | `tab.activeForeground` / `tab.activeBackground` | 14.25:1 | 4.5:1 | Pass |
| santi020k dark | `button.secondaryForeground` / `button.secondaryBackground` | 6.49:1 | 4.5:1 | Pass |
| santi020k dark | `editorGhostText.foreground` / `editor.background` | 3.28:1 | 3:1 | Pass |
| santi020k dark | `inlineChatInput.foreground` / `inlineChatInput.background` | 12.09:1 | 4.5:1 | Pass |
| santi020k light | `editor.foreground` / `editor.background` | 12.48:1 | 4.5:1 | Pass |
| santi020k light | `foreground` / `editor.background` | 12.48:1 | 4.5:1 | Pass |
| santi020k light | `input.foreground` / `input.background` | 13.38:1 | 4.5:1 | Pass |
| santi020k light | `button.foreground` / `button.background` | 8.70:1 | 4.5:1 | Pass |
| santi020k light | `quickInput.foreground` / `quickInput.background` | 11.59:1 | 4.5:1 | Pass |
| santi020k light | `notifications.foreground` / `notifications.background` | 11.59:1 | 4.5:1 | Pass |
| santi020k light | `terminal.foreground` / `terminal.background` | 11.59:1 | 4.5:1 | Pass |
| santi020k light | `statusBar.foreground` / `statusBar.background` | 8.70:1 | 4.5:1 | Pass |
| santi020k light | `tab.activeForeground` / `tab.activeBackground` | 12.48:1 | 4.5:1 | Pass |
| santi020k light | `button.secondaryForeground` / `button.secondaryBackground` | 8.47:1 | 4.5:1 | Pass |
| santi020k light | `editorGhostText.foreground` / `editor.background` | 3.25:1 | 3:1 | Pass |
| santi020k light | `inlineChatInput.foreground` / `inlineChatInput.background` | 13.38:1 | 4.5:1 | Pass |
| santi020k hc dark | `editor.foreground` / `editor.background` | 16.94:1 | 4.5:1 | Pass |
| santi020k hc dark | `foreground` / `editor.background` | 16.94:1 | 4.5:1 | Pass |
| santi020k hc dark | `input.foreground` / `input.background` | 15.15:1 | 4.5:1 | Pass |
| santi020k hc dark | `button.foreground` / `button.background` | 7.07:1 | 4.5:1 | Pass |
| santi020k hc dark | `quickInput.foreground` / `quickInput.background` | 16.32:1 | 4.5:1 | Pass |
| santi020k hc dark | `notifications.foreground` / `notifications.background` | 16.32:1 | 4.5:1 | Pass |
| santi020k hc dark | `terminal.foreground` / `terminal.background` | 17.34:1 | 4.5:1 | Pass |
| santi020k hc dark | `statusBar.foreground` / `statusBar.background` | 10.58:1 | 4.5:1 | Pass |
| santi020k hc dark | `tab.activeForeground` / `tab.activeBackground` | 16.94:1 | 4.5:1 | Pass |
| santi020k hc dark | `button.secondaryForeground` / `button.secondaryBackground` | 11.50:1 | 4.5:1 | Pass |
| santi020k hc dark | `editorGhostText.foreground` / `editor.background` | 3.37:1 | 3:1 | Pass |
| santi020k hc dark | `inlineChatInput.foreground` / `inlineChatInput.background` | 15.15:1 | 4.5:1 | Pass |
| santi020k hc light | `editor.foreground` / `editor.background` | 12.48:1 | 4.5:1 | Pass |
| santi020k hc light | `foreground` / `editor.background` | 12.48:1 | 4.5:1 | Pass |
| santi020k hc light | `input.foreground` / `input.background` | 13.38:1 | 4.5:1 | Pass |
| santi020k hc light | `button.foreground` / `button.background` | 8.70:1 | 4.5:1 | Pass |
| santi020k hc light | `quickInput.foreground` / `quickInput.background` | 11.59:1 | 4.5:1 | Pass |
| santi020k hc light | `notifications.foreground` / `notifications.background` | 11.59:1 | 4.5:1 | Pass |
| santi020k hc light | `terminal.foreground` / `terminal.background` | 11.59:1 | 4.5:1 | Pass |
| santi020k hc light | `statusBar.foreground` / `statusBar.background` | 8.70:1 | 4.5:1 | Pass |
| santi020k hc light | `tab.activeForeground` / `tab.activeBackground` | 12.48:1 | 4.5:1 | Pass |
| santi020k hc light | `button.secondaryForeground` / `button.secondaryBackground` | 8.47:1 | 4.5:1 | Pass |
| santi020k hc light | `editorGhostText.foreground` / `editor.background` | 3.25:1 | 3:1 | Pass |
| santi020k hc light | `inlineChatInput.foreground` / `inlineChatInput.background` | 13.38:1 | 4.5:1 | Pass |

## Website requirements

- Visible keyboard focus uses a three-pixel violet outline with offset.
- Light and dark modes are exposed through `color-scheme` and preserve readable foreground/background roles.
- Motion is disabled or reduced under `prefers-reduced-motion: reduce`.
- Theme controls use native buttons, selects, checkboxes, and accessible labels.

Source: [theme validator](../packages/santi020k-theme/scripts/validate-themes.mjs).
