accessible-contrast
Accessible Contrast Pairs
Generate color ramps specifically designed for accessible text/background combinations. Uses an 11-step scale for predictable WCAG-compliant pairing.
When to Use
- "Create accessible color combinations"
- "I need WCAG compliant colors"
- "Generate high contrast pairs"
- "Make sure my text is readable"
Installation
npx @basiclines/rampa
The 11-Step Strategy
Why 11 steps? It creates predictable pairing math:
| Pair | Indices | Contrast Level |
|---|---|---|
| Maximum | 0 + 10 | Highest (near white + near black) |
| AAA Normal | 1 + 9, 2 + 8 | 7:1+ ratio |
| AA Normal | 3 + 7 | 4.5:1+ ratio |
| AA Large | 4 + 6 | 3:1+ ratio |
Recipe
rampa -C "<brand-color>" -L 98:5 --size=11 -O css --name=color
-L 98:5ensures full range from near-white to near-black--size=11creates indices 0-10 for easy pairing- Pairs are symmetrical: 0+10, 1+9, 2+8, etc.
Complete Example
For brand color #3b82f6:
rampa -C "#3b82f6" -L 98:5 --size=11 -O css --name=blue
Output:
:root {
--blue-0: #f8fafc; /* Near white */
--blue-1: #f1f5f9;
--blue-2: #e2e8f0;
--blue-3: #cbd5e1;
--blue-4: #94a3b8;
--blue-5: #64748b; /* Middle gray */
--blue-6: #475569;
--blue-7: #334155;
--blue-8: #1e293b;
--blue-9: #0f172a;
--blue-10: #020617; /* Near black */
}
Contrast Pairing Guide
For Normal Text (4.5:1 minimum - WCAG AA)
/* Light backgrounds with dark text */
.light-subtle {
background: var(--blue-0);
color: var(--blue-7); /* 0+7 = AA */
}
.light-default {
background: var(--blue-1);
color: var(--blue-8); /* 1+8 = AA */
}
.light-strong {
background: var(--blue-2);
color: var(--blue-9); /* 2+9 = AAA */
}
/* Dark backgrounds with light text */
.dark-subtle {
background: var(--blue-10);
color: var(--blue-3); /* 10+3 = AA */
}
.dark-default {
background: var(--blue-9);
color: var(--blue-2); /* 9+2 = AA */
}
.dark-strong {
background: var(--blue-8);
color: var(--blue-1); /* 8+1 = AAA */
}
For Large Text (3:1 minimum - WCAG AA)
.large-text {
background: var(--blue-3);
color: var(--blue-7); /* 3+7 = AA Large */
}
Maximum Contrast
.max-contrast {
background: var(--blue-0);
color: var(--blue-10); /* 0+10 = Maximum */
}
Quick Reference Table
| Background | Text for AA | Text for AAA |
|---|---|---|
| 0 | 7, 8, 9, 10 | 8, 9, 10 |
| 1 | 7, 8, 9, 10 | 8, 9, 10 |
| 2 | 8, 9, 10 | 9, 10 |
| 3 | 8, 9, 10 | 9, 10 |
| 7 | 0, 1, 2, 3 | 0, 1, 2 |
| 8 | 0, 1, 2, 3 | 0, 1, 2 |
| 9 | 0, 1, 2 | 0, 1 |
| 10 | 0, 1, 2 | 0, 1 |
Multiple Colors
Generate accessible ramps for multiple brand colors:
rampa -C "#3b82f6" -L 98:5 --size=11 -O css --name=blue
rampa -C "#22c55e" -L 98:5 --size=11 -O css --name=green
rampa -C "#ef4444" -L 98:5 --size=11 -O css --name=red
All ramps use the same index pairing logic.
Tips
- The
-L 98:5range is crucial - it ensures full contrast range - Middle values (4, 5, 6) work for disabled/muted states
- Always test actual rendered contrast - tools like Stark, axe can verify
- The index math (0+10, 1+9, 2+8) makes theming predictable
- For buttons: use index 5-6 as background, 0-1 as text
More from basiclines/rampa-studio
rampa-colors
Generate mathematically accurate color palettes using OKLCH color space. Use when creating design systems, color ramps, accessible palettes, CSS variables for themes, or when user asks about color generation.
36theme-foundation
Create a complete theme foundation with accent, secondary, and neutral color ramps from a single brand color. Use when building light/dark mode themes or starting a new design system.
32data-viz-palette
Generate distinct, accessible colors for charts, graphs, and data visualizations. Uses color harmonies for maximum perceptual distinction.
30tinted-neutrals
Generate neutral gray palettes with subtle brand color tinting. Use when you want grays that feel connected to your brand rather than pure neutral grays.
27status-from-accent
Generate success, warning, danger, and info status colors that harmonize with your brand using square harmony. All colors mathematically derived from one input.
27brand-expansion
Expand a single brand color into a complete multi-hue color system using harmonies. Creates primary, analogous, complementary, and split-complementary ramps.
26