Title: Add an "Increase contrast" accessibility setting to Appearance · Issue #66 · modelstudioai/openwork · GitHub
Open Graph Title: Add an "Increase contrast" accessibility setting to Appearance · Issue #66 · modelstudioai/openwork
X Title: Add an "Increase contrast" accessibility setting to Appearance · Issue #66 · modelstudioai/openwork
Description: Problem or Motivation OpenWork's Settings → Appearance → Interface section already offers one accessibility affordance — the Reduce motion toggle (shipped in #51). But it has no way to increase visual contrast. Today the app's borders, d...
Open Graph Description: Problem or Motivation OpenWork's Settings → Appearance → Interface section already offers one accessibility affordance — the Reduce motion toggle (shipped in #51). But it has no way to increase vis...
X Description: Problem or Motivation OpenWork's Settings → Appearance → Interface section already offers one accessibility affordance — the Reduce motion toggle (shipped in #51). But it has no way to increase...
Opengraph URL: https://github.com/modelstudioai/openwork/issues/66
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Add an \"Increase contrast\" accessibility setting to Appearance","articleBody":"## Problem or Motivation\n\nOpenWork's **Settings → Appearance → Interface** section already offers one\naccessibility affordance — the **Reduce motion** toggle (shipped in #51). But it\nhas **no way to increase visual contrast**. Today the app's borders, dividers,\ninput outlines and secondary/\"muted\" text are intentionally low-contrast\n(derived from `--foreground` at very low alpha, e.g. `--border` is\n`oklch(from var(--foreground) l c h / 0.05)` and `--muted-foreground` is only a\n50% mix in `apps/electron/src/renderer/index.css`). That looks clean but is hard\nto read for low-vision users and in bright environments.\n\nIncreasing contrast is a standard desktop-app accessibility control that\nOpenWork's peers expose and OpenWork lacks:\n\n- **macOS** — System Settings → Accessibility → Display → **Increase contrast**.\n- **Windows** — **Contrast themes**.\n- **VS Code** (which Claude Code / Codex desktop build on) — dedicated\n **High Contrast** themes.\n- **Claude Desktop / ChatGPT desktop** — standing accessibility asks for a\n higher-contrast reading mode.\n\nReduce motion is already here; **Increase contrast** is its natural companion in\nthe same Interface section.\n\n## Proposed Solution\n\nAdd an **\"Increase contrast\"** toggle to **Settings → Appearance → Interface**,\ndirectly below the existing **Reduce motion** toggle. It is a renderer-only,\nfrontend preference — no backend involvement:\n\n- Persist it in `localStorage` (new key `craft-high-contrast`), mirroring\n `Reduce motion`'s `craft-reduce-motion` and the other lightweight prefs in\n `apps/electron/src/renderer/lib/local-storage.ts`.\n- Provide it app-wide via a small `HighContrastProvider` context (mirroring\n `ReduceMotionContext`), wired in `main.tsx`.\n- When enabled, set `data-high-contrast=\"true\"` on `\u003chtml\u003e`. A global CSS block\n in `index.css` gated on `:root[data-high-contrast='true']` then **raises the\n contrast of theme tokens** — strengthening `--border`, `--input`,\n `--muted-foreground`, `--foreground-dimmed` and the focus `--ring`, and adding\n a visible focus outline. Because every theme derives these tokens from\n `--foreground` (which flips per light/dark), the alpha-based overrides work in\n **both light and dark** and across preset themes.\n- Add two i18n keys (`settings.appearance.increaseContrast` /\n `...Desc`) across all **7** locales, matching how `reduceMotion` is localized.\n\nOff by default, so existing users see no change.\n\n## Feasibility\n\n**Frontend-only — confirmed feasible.** This is the exact mechanism the merged\n`Reduce motion` feature uses (localStorage pref → React context → `\u003chtml\u003e` data\nattribute → CSS guard). No qwen-code backend change is required. Theme variables\nare injected as a `:root { … }` stylesheet rule\n(`ThemeContext.tsx`), so a higher-specificity `:root[data-high-contrast='true']`\nselector overrides them cleanly without `!important`.\n\n## Acceptance Criteria (what the CDP assertion will check)\n\nDriven over CDP in the draft/no-session state (no backend), mirroring the\n`reduce-motion` assertion:\n\n1. Open **Settings → Appearance**; the **Increase contrast** toggle renders and\n is **off** initially, with no `data-high-contrast` attribute on `\u003chtml\u003e`.\n2. Enabling it: the switch reads `aria-checked=\"true\"`, `\u003chtml\u003e` gains\n `data-high-contrast=\"true\"`, `localStorage['craft-high-contrast'] === \"true\"`,\n and the high-contrast CSS actually applies (a dedicated\n `--hc-enabled` custom property computes to `1` on `:root`).\n3. Disabling it reverts all four: switch off, attribute removed,\n `localStorage` `\"false\"`, and `--hc-enabled` no longer `1` — proving it both\n applies and reverts, not merely renders.\n","author":{"url":"https://github.com/DragonnZhang","@type":"Person","name":"DragonnZhang"},"datePublished":"2026-07-07T13:28:50.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/66/openwork/issues/66"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:2321d8ce-fcd9-76c0-ca91-51fb38fedd04 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 847A:3A1626:1522F99:1C986F6:6A52274F |
| html-safe-nonce | 8c144ebdd528dd0d175fbaa04d9bae65e7502978786122d81ad118b5df1afce6 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4NDdBOjNBMTYyNjoxNTIyRjk5OjFDOTg2RjY6NkE1MjI3NEYiLCJ2aXNpdG9yX2lkIjoiNjMyMTkyMjYxODU4NTkxNzI2MyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | e2185274ed6745d856d68f75e8299de1307da5dd923e8a5e67a596c1ba5845a8 |
| hovercard-subject-tag | issue:4828972416 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/modelstudioai/openwork/66/issue_layout |
| twitter:image | https://opengraph.githubassets.com/99418e21e3063febb6dbfdd56904a8b90edf51d820afec02d538b032f62dc23a/modelstudioai/openwork/issues/66 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/99418e21e3063febb6dbfdd56904a8b90edf51d820afec02d538b032f62dc23a/modelstudioai/openwork/issues/66 |
| og:image:alt | Problem or Motivation OpenWork's Settings → Appearance → Interface section already offers one accessibility affordance — the Reduce motion toggle (shipped in #51). But it has no way to increase vis... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | DragonnZhang |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/modelstudioai/openwork git https://github.com/modelstudioai/openwork.git |
| octolytics-dimension-user_id | 283556804 |
| octolytics-dimension-user_login | modelstudioai |
| octolytics-dimension-repository_id | 1256697754 |
| octolytics-dimension-repository_nwo | modelstudioai/openwork |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1256697754 |
| octolytics-dimension-repository_network_root_nwo | modelstudioai/openwork |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7aed05249554b889eb33d002851a973eebcc7e91 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width