Status: Experimental Last updated:
The CSS Working Group is developing contrast-color(), a function that automatically generates a contrasting color from a background.
This section identifies where Default Admin could integrate contrast-color overrides to improve accessibility resilience.
Note: This is informational only; contrast-color is not yet part of WCAG standards and requires @supports feature detection.
contrast-color(color, target: AA) returns either white or black (or specified options), whichever has higher contrast against the input color.
Browsers will handle the contrast math, eliminating the need for manual light/dark branching.
/* Example: Using contrast-color to pick text automatically */
button {
background: var(--button-bg);
color: white; /* fallback for browsers without support */
}
@supports (color: contrast-color(white)) {
button {
color: contrast-color(var(--button-bg), target: AA);
}
}
Priority: Highest
Most frequently interacted with; manual branching is error-prone when presets change.
/* File: core/themes/default_admin/css/base/variables.css */
@supports (color: contrast-color(white)) {
--button-fg-color--primary: contrast-color(
var(--button-bg-color--primary),
target: AA
);
}
Impact: Removes dependency on --gin-color-button-text token switching.
Priority: High
Automatically adapts when users change accent presets.
/* File: core/themes/default_admin/css/base/accents.css */
@supports (color: contrast-color(white)) {
--gin-color-primary-text: contrast-color(
var(--gin-color-primary),
target: AA
);
}
Impact: Eliminates need for per-preset text color overrides.
Priority: Medium
Focus indicators adapt to whatever background surface they appear on.
/* File: core/themes/default_admin/css/base/variables.css */
@supports (color: contrast-color(white)) {
--gin-color-focus: contrast-color(
var(--gin-bg-layer),
target: 3:1
);
}
Impact: Reduces hard-coded focus colors; ensures 3:1 focus-to-unfocused contrast automatically.
Priority: Medium
Form element borders must meet 3:1 contrast against background.
/* File: core/themes/default_admin/css/base/variables.css */
@supports (color: contrast-color(white)) {
--gin-border-color-form-element: contrast-color(
var(--gin-bg-layer),
target: 3:1
);
}
Priority: Lower
Links embedded in content; less critical for primary UI.
/* File: core/themes/default_admin/css/base/variables.pcss.css */
@supports (color: contrast-color(white)) {
--gin-color-link: contrast-color(
var(--gin-bg-app),
target: AA
);
}
/* Comprehensive approach with fallbacks */
:root {
/* Default fallback for browsers without contrast-color support */
--button-fg-color--primary: var(--gin-color-button-text);
--gin-color-focus: #007bff;
--gin-border-color-form-element: #999;
}
/* Enhanced support for modern browsers */
@supports (color: contrast-color(white)) {
:root {
--button-fg-color--primary: contrast-color(var(--button-bg-color--primary), target: AA);
--gin-color-focus: contrast-color(var(--gin-bg-layer), target: 3:1);
--gin-border-color-form-element: contrast-color(var(--gin-bg-layer), target: 3:1);
}
}
⚠️ As of May 2026, contrast-color() is not yet part of the CSS Color Module Level 4 final spec and is highly experimental.
Implementations vary; always provide fallbacks via @supports.
/* Check support at runtime (JavaScript) */
const supportsContrastColor = CSS.supports('color', 'contrast-color(white)');
if (supportsContrastColor) {
document.documentElement.classList.add('has-contrast-color-support');
}
/* Or use CSS @supports directly (recommended) */
@supports (color: contrast-color(white)) {
/* Apply contrast-color enhancements */
}