Summary
Cursor references the CSS custom property --cursor-text-link in ~14 places
throughout the bundled JS/CSS (chat transcript, chat input, markdown rendering,
diff cards, etc.) but never defines it in any theme. Browsers therefore
fall back to the user-agent default for <a>:link — #0000EE — which is
barely visible on the black background of the Dark High Contrast theme. This
is an accessibility regression for users who rely on the high-contrast theme,
and the affected colors fall below WCAG AA contrast requirements.
Environment
- Cursor version: 3.2.21 (Electron 39.8.1) — please confirm with your version
- OS: macOS (26.4.1)
- Theme: Dark High Contrast
- Display label:
Dark High Contrast - Theme ID (settingsId):
Default High Contrast - uiTheme:
hc-black
- Display label:
Steps to reproduce
- Switch to the Dark High Contrast theme.
- Open a chat with the assistant and request a response that contains:
- A markdown link, e.g.
[Cursor docs](https://docs.cursor.com) - A bare URL, e.g.
https://example.com - An inline file path, e.g.
/Applications/Cursor.app/Contents/Resources/...
- A markdown link, e.g.
- Observe how those links render in the chat transcript.
- Open a
.mdfile and click the Preview button. Observe how links render
in the preview pane.
Expected
Hyperlinks render in a high-contrast color appropriate for a black-background
accessibility theme (e.g. a bright sky blue around #4FC3F7 or VS Code’s
hardcoded hcDark default of #21A6FF).
Actual
Hyperlinks render as rgb(0, 0, 238) / #0000EE — the browser’s user-agent
default for <a>:link. Contrast against #000000 is ~2.7:1, below WCAG AA’s
4.5:1 minimum and well below AAA’s 7:1.
Root cause investigation
The CSS variable --cursor-text-link is referenced but never defined:
$ grep -c "cursor-text-link" workbench.desktop.main.js
14
$ grep -oE '\-\-cursor-text-link[ ]*:' workbench.desktop.main.js | wc -l
0
Per the CSS Custom Properties spec, when a var(--undefined) reference is
used in a property declaration, the declaration is invalid and the property
falls back to its inherited or initial value. For elements styled like links
(e.g. <code class="md-clickable-code">, <a> tags rendered via Cursor’s
React/ProseMirror chat components), the browser’s user-agent stylesheet
applies color: -webkit-link (#0000EE).
Affected selectors (non-exhaustive)
All from out/vs/workbench/workbench.desktop.main.js:
.markdown-root .md-clickable-code— chat transcript inline file paths.markdown-root a(no explicit rule, but inherits) — chat markdown links
and bare URLs.ui-rich-text-editor__content .ProseMirror a— chat input editor.ui-prompt-input-editor .ProseMirror a[href]— chat composer pill links.ui-prompt-input-tiptap-readonly .ProseMirror a[href]— read-only Tiptap.ui-diff-card__generated-load,.ui-diff-card__large-diff-load— diff card
action links
Note: VS Code’s --vscode-textLink-foreground (controlled by
workbench.colorCustomizations.textLink.foreground) does NOT cover these
surfaces because they reference Cursor’s separate --cursor-text-link
variable. Therefore, user-side workbench.colorCustomizations settings have
no effect on these hyperlinks regardless of theme.
The default Dark High Contrast theme JSON (hc_black.json) also does not set
textLink.foreground, though VS Code’s hardcoded hc-black default of
#21A6FF would fill that gap for --vscode-textLink-foreground. The
Cursor-specific variable has no analogous fallback.
Suggested fix
Define --cursor-text-link (and --cursor-text-link-hover) in :root with
per-theme values, ideally derived from the existing theme system. For example:
:root.hc-black {
--cursor-text-link: var(--vscode-textLink-foreground, #21A6FF);
--cursor-text-link-hover: var(--vscode-textLink-activeForeground, #21A6FF);
}
:root.vs-dark {
--cursor-text-link: var(--vscode-textLink-foreground, #3794FF);
--cursor-text-link-hover: var(--vscode-textLink-activeForeground, #3794FF);
}
:root.vs {
--cursor-text-link: var(--vscode-textLink-foreground, #006AB1);
--cursor-text-link-hover: var(--vscode-textLink-activeForeground, #006AB1);
}
:root.hc-light {
--cursor-text-link: var(--vscode-textLink-foreground, #0F4A85);
--cursor-text-link-hover: var(--vscode-textLink-activeForeground, #0F4A85);
}
This way every theme has a meaningful value, and users can still override via
workbench.colorCustomizations.textLink.foreground if they want.
Workaround (current)
Append a CSS file to workbench.desktop.main.css defining --cursor-text-link
and adding !important color rules for the affected selectors. This is lost
whenever Cursor updates and must be re-applied.
Severity
Accessibility — affects users who specifically choose the Dark High Contrast
theme for visual accessibility reasons. The primary interactive element
(hyperlinks) renders well below WCAG-recommended contrast against the theme’s
black background.