v149 · CSS · Privacy
Web app scope system accent color
Chrome 149 restricts the CSS AccentColor and AccentColorText system color keywords — and accent-color: auto — so they only resolve to the user's actual system accent color when inside an installed PWA or a trusted profile context. On regular web pages they resolve to a fixed fallback, preventing fingerprinting.
concepts
-
Accent Color Demo
Shows the current resolved value of
AccentColorandAccentColorTextkeywords on this page. In a regular browser tab the keywords resolve to a fixed fallback; install the demo as a PWA to see the real system color. -
Fingerprinting Context
Explains why unrestricted system color access was a fingerprinting risk and how scoping to web app context neutralises it — with a comparison of what browsers expose before and after the change.
-
Scope Detection
Live probe of the current
AccentColorandAccentColorTextresolved values in your browser. Shows whether you're seeing the real OS accent (pre-149 or PWA context) or the fixed fingerprinting-safe fallback — plus the fingerprinting risk table by context. -
Accent Color UI Kit
A gallery of buttons, checkboxes, radios, progress bars and range inputs all styled with
AccentColorandAccentColorText. Toggle between "regular tab" (Chrome 149 fixed fallback) and "PWA context" (real OS accent) modes, or use the colour picker to simulate any OS accent and see how the component palette adapts. -
Fingerprinting Explainer
Step-by-step walkthrough of the fingerprinting attack: create a hidden element with
background: AccentColor, readgetComputedStyle, map the color to OS identity. A live probe shows what your browser currently returns. A timeline traces the change from pre-149 (real OS color everywhere) to Chrome 149 (fixed fallback on regular tabs, real color in PWA scope). -
Contrast Compliance Checker
Reads the live
AccentColorandAccentColorTextvalues from your browser, computes WCAG contrast ratios, and shows pass/fail across four contexts: Chrome 149 regular tab (fixed fallback), PWA scope (real OS color), Chrome <149 (real OS color), and your custom theme_color. A component preview renders a button, checkbox, and progress bar in the chosen context so you can see contrast issues visually.
why it shipped
The AccentColor CSS system color keyword exposes the user's operating system accent color — a value that varies between users and devices. Because accent colors are user-configurable and vary widely, scripts that read the computed value via getComputedStyle() can extract a distinguishing bit for fingerprinting. Chrome 149 limits the real system value to installed PWA contexts where the user has already made a deliberate choice to install an app, falling back to a fixed neutral color on regular web pages.
the change
/* These keywords work in all browsers: */
button {
background: AccentColor; /* system accent color (or fallback in Chrome 149+) */
color: AccentColorText; /* text that contrasts with AccentColor */
}
/* accent-color: auto also uses AccentColor internally */
input[type=checkbox] { accent-color: auto; }
/* Chrome 149+ behaviour:
- In a regular tab: AccentColor resolves to a fixed fallback (not user's OS color)
- In an installed PWA (web app scope): AccentColor resolves to the real OS color
This means AccentColor is still useful for PWAs that need to match OS theme,
but cannot be used to fingerprint users on arbitrary web pages. */
references
implementation reference
Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗