if (contrastRatio < THRESHOLD) { const [r, g, b] = foregroundColor; let hsl = rgbToHsl(r, g, b); const adjustmentFactor = Math.max(0, (THRESHOLD - contrastRatio) / THRESHOLD); // Резко снижаем насыщенность при низком контрасте hsl[1] = Math.max(0, hsl[1] - DESATURATE * adjustmentFactor); // Примерно так: if (contrastRatio < 0.7 * THRESHOLD) { // Если контраст критически низкий — увеличиваем яркость до максимума hsl[2] = Math.min(95, 95); // или даже 100% } else if (contrastRatio < THRESHOLD) { // Если просто ниже порога — немного осветляем hsl[2] = Math.min(100, hsl[2] + LIGHTEN * adjustmentFactor); } // Опционально: установить минимальную яркость hsl[2] = Math.max(hsl[2], 40); // Не меньше 40% яркости el.style.color = `hsl(${hsl[0]}, ${hsl[1]}%, ${hsl[2]}%)`; el.dataset.colorAdjusted = "true"; } |