if (contrastRatio < THRESHOLD) { const [r, g, b] = foregroundColor; // Специальная обработка для чёрного текста if (r === 0 && g === 0 && b === 0) { el.style.color = "#ffffff"; // меняем чёрный на белый el.dataset.colorAdjusted = "true"; continue; } let hsl = rgbToHsl(r, g, b); const adjustmentFactor = Math.max(0, (THRESHOLD - contrastRatio) / THRESHOLD); hsl[1] = Math.max(0, hsl[1] - DESATURATE * adjustmentFactor); let brightnessIncrease = 0; if (contrastRatio < 0.7 * THRESHOLD) { brightnessIncrease = 3 * LIGHTEN; } else if (contrastRatio < THRESHOLD) { brightnessIncrease = 0.5 * LIGHTEN; } hsl[2] = Math.min(100, hsl[2] + brightnessIncrease * adjustmentFactor); el.style.color = `hsl(${hsl[0]}, ${hsl[1]}%, ${hsl[2]}%)`; el.dataset.colorAdjusted = "true"; } |