English

Perceptually-Minimal Color Optimization for Web Accessibility: A Multi-Phase Constrained Approach

Human-Computer Interaction 2025-12-05 v1 Optimization and Control

Abstract

Web accessibility guidelines require sufficient color contrast between text and backgrounds; yet, manually adjusting colors often necessitates significant visual deviation, compromising vital brand aesthetics. We present a novel, multi-phase optimization approach for automatically generating WCAG-compliant colors while minimizing perceptual change to original design choices. Our method treats this as a constrained, non-linear optimization problem, utilizing the modern perceptually uniform OKLCH color space. Crucially, the optimization is constrained to preserve the original hue (H\text{H}) of the color, ensuring that modifications are strictly limited to necessary adjustments in lightness (L\text{L}) and chroma (C\text{C}). This is achieved through a three-phase sequence: binary search, gradient descent, and progressive constraint relaxation. Evaluation on a dataset of 10,000 procedurally generated color pairs demonstrates that the algorithm successfully resolves accessibility violations in 77.22%77.22\% of cases, with 88.51%88.51\% of successful corrections exhibiting imperceptible color difference (ΔE2000<2.0\Delta E_{2000} < 2.0) as defined by standard perceptibility thresholds. The median perceptual change for successful adjustments is only 0.76 ΔE20000.76\ \Delta E_{2000}, and the algorithm achieves this with a median processing time of 0.876ms0.876\text{ms} per color pair. The approach demonstrates that accessibility compliance and visual design integrity can be achieved simultaneously through a computationally efficient, perceptually-aware optimization that respects brand identity. The algorithm is publicly implemented in the open-source cm-colors Python library.

Keywords

Cite

@article{arxiv.2512.05067,
  title  = {Perceptually-Minimal Color Optimization for Web Accessibility: A Multi-Phase Constrained Approach},
  author = {Lalitha A R},
  journal= {arXiv preprint arXiv:2512.05067},
  year   = {2025}
}
R2 v1 2026-07-01T08:09:58.966Z