Simulate all palette entries with one explicit vision profile:
use PhpColor\Color\Palette\ColorPalette;
use PhpColor\Color\Vision\ColorVisionSimulator;
use PhpColor\Color\Vision\VisionProfile;
$source = ColorPalette::parse([
'danger' => '#dc2626',
'warning' => '#d97706',
'success' => '#16a34a',
'info' => '#2563eb',
]);
$colors = ColorVisionSimulator::create(VisionProfile::Deuteranopia)
->simulateAll($source->all());
$result = array_combine(
$source->names(),
array_map(static fn ($color) => $color->toHex(), $colors),
);
assert(['danger' => '#98a526', 'warning' => '#b4bc28',
'success' => '#4b4065', 'info' => '#3c38c2'] === $result);
use PhpColor\Color\Palette\ColorPalette;
use PhpColor\Color\Vision\ColorVisionSimulator;
use PhpColor\Color\Vision\VisionProfile;
$source = ColorPalette::parse([
'danger' => '#dc2626',
'warning' => '#d97706',
'success' => '#16a34a',
'info' => '#2563eb',
]);
$colors = ColorVisionSimulator::create(VisionProfile::Deuteranopia)
->simulateAll($source->all());
$result = array_combine(
$source->names(),
array_map(static fn ($color) => $color->toHex(), $colors),
);
assert(['danger' => '#98a526', 'warning' => '#b4bc28',
'success' => '#4b4065', 'info' => '#3c38c2'] === $result);
The matrix simulation is a test aid, not a reproduction of every person's experience. Test meaning, labels, and contrast as well as color separation.