Contrast Ratio — Brand Teal
Brand teal passes on dark backgrounds but fails on white.
Verdigris Teal
teal on neutral.950
Verdigris Teal
teal on white
Focus Indicator
All interactive elements must show a visible focus ring.
2px solid, 2px offset
Touch Target Size
Interactive elements must be at least 44 x 44 px (WCAG 2.5.5).
44px
PASS
minimum
32px
FAIL
too small
Documentation
Accessibility
Standards
All Verdigris design decisions must meet WCAG 2.1 Level AA at minimum.
Color Contrast
| Requirement | Ratio | Applies to |
|---|---|---|
| Normal text | 4.5:1 | Body text, labels, links |
| Large text (18px+ bold, 24px+ regular) | 3:1 | Headings, hero text |
| UI components | 3:1 | Borders, icons, focus indicators |
| Decorative | — | Brand color in backgrounds, illustrations |
Brand Teal Contrast
The bright brand teal (oklch(0.75 0.1286 191.57) / #0fc8c3) has a contrast ratio of ~2.8:1 against white — insufficient for normal text. Solutions:
- www approach: Darken to
hsl(178, 86%, 28%)for text use (~4.9:1) - Patina approach: Use neutral.900 (near-black) for text, reserve brand teal for decorative use
- Recommendation: Follow Patina — use brand teal decoratively, dark neutrals for text
Focus Indicators
- All interactive elements must have visible focus indicators
- Both codebases use
outline-ring/50(Patina) or--ring(www) for focus rings - Focus must be visible in both light and dark modes
- Never use
outline: nonewithout a custom focus indicator
Reduced Motion
All animations must be wrapped in:
@media (prefers-reduced-motion: no-preference) {
/* animation here */
}
Or disabled in the reduce case:
@media (prefers-reduced-motion: reduce) {
.animated { animation: none; }
}
Hover vs Touch
Hover effects should be gated:
@media (hover: hover) and (pointer: fine) {
/* hover effects */
}
This prevents “sticky hover” on touch devices.
Alt Text & ARIA
- All images require meaningful
alttext (not “image of…” — describe what it conveys) - Interactive components require
aria-labelor visible label - Icon-only buttons require
aria-label - Use semantic HTML elements (
<button>,<nav>,<main>) — not<div onclick>
Color Independence
Never communicate information through color alone. Always pair color with:
- Text labels
- Icons or patterns
- Position/shape differences
Example: Error states use red color AND an error icon AND descriptive text.