Commit Graph
1127 Commits
Author SHA1 Message Date
Timothy Jaeryang Baek 0e0d08382a refac 2026-07-26 18:11:12 -04:00
Timothy Jaeryang Baek 1f0dc90abe refac 2026-07-26 18:06:03 -04:00
Classic298 e3cce68ef2 fix: gate placeholder contrast fix behind High Contrast Mode (#27555)
Follow-up to #27496, reopened as a high contrast mode change.

Placeholder text is the lowest contrast text in the product. The grey scale in src/tailwind.css is achromatic oklch(L 0 0), so relative luminance is exactly L³, and placeholder:text-gray-300 is 1.58:1 on white against the 4.5:1 required by WCAG 1.4.3. The large text exemption does not apply, the largest of these is text-lg. Placeholders are frequently the only format hint a field gives, for example admin/Settings/General.svelte uses e.g.) "http://localhost:3000".

Rather than deleting the ~200 per-component placeholder utilities and rewriting the base rule, the remap now happens in two CSS rules that only apply when the existing High Contrast Mode setting is on, so the default theme is untouched:

- placeholders resolve to gray-600 (5.75:1) in light mode
- placeholders resolve to gray-500 (6.46:1) in dark mode

The rules sit in `@layer utilities` and are anchored on `input`/`textarea`, which puts them above both the base rule in src/tailwind.css and every per-component `placeholder:text-*` utility, so no call site has to change. Placeholders stay distinguishable from real input values, which are text-gray-700 (8.46:1) in light and dark:text-gray-300 (11.39:1) in dark.

The chat composer placeholder is a tiptap ::before, so neither the base rule nor any utility reaches it. It is hardcoded #676767, which is 5.66:1 in light but only 3.17:1 on the dark canvas, so only the dark side is remapped, to gray-500. That rule stays outside the layer because the rule it overrides is unlayered too.

The root layout toggles a `high-contrast` class on documentElement from `$settings.highContrastMode`, alongside the existing theme classes, so every route is covered and the class is removed again when the setting is turned off.

Verified in a browser against Tailwind's emitted rules and layer order, on inputs both with and without per-component placeholder utilities: with the setting on, placeholders resolve to gray-600 in light and gray-500 in dark, the composer placeholder resolves to gray-500 in dark even with the prefers-color-scheme override treated as unconditional, and with the setting off nothing changes in either theme. Also checked against the oled-dark theme (gray-500 on #000 is 7.57:1) and the dark:bg-white/[0.03] input surface (6.01:1).

Note: the `high-contrast` class toggle is the same hunk as in the muted text contrast branch. Whichever lands first, the other rebases cleanly by dropping it.
2026-07-26 18:02:57 -04:00
G30 29499cb4ba perf: dedupe folder refetches and chat-list sweeps on sidebar folder selection (#27540) 2026-07-26 17:27:33 -04:00
G30 ef197de0d7 fix: open settings deep links on client-side navigation and open Add Terminal settings directly (#27552) 2026-07-26 17:26:34 -04:00
Timothy Jaeryang Baek d7513e4ce8 refac 2026-07-24 02:05:31 -04:00
Classic298 585b704597 fix: clear token cookie on 401 auth redirect to stop login flash loop (#26751)
Since v0.10.0 a global fetch interceptor redirects to /auth and clears
localStorage.token whenever an authenticated backend request returns 401.
The OAuth callback cookie ("token", set with httponly=False so the
frontend can read it) is left behind. The auth page's oauthCallbackHandler
then immediately signs the user back in from that cookie and navigates to
"/", where the next 401 triggers the redirect again. The result is an
endless /auth and / ping-pong that renders as uncontrollable screen
flashing, and as a PWA stuck on a flashing splash screen when SvelteKit's
update check turns each navigation into a full page reload. Affected
users could only recover by clearing cookies, which matches the reports.

Clear the token cookie together with localStorage when redirecting, so
/auth stays on the login form and the user can sign in again normally.

Fixes #26731
2026-07-24 00:59:43 -05:00
G30 3132f11e55 feat: add setting to toggle keyboard shortcuts on/off (#27300) 2026-07-23 22:14:56 -04:00
Timothy Jaeryang Baek 49abfbdd15 refac 2026-07-23 13:18:04 -04:00
Timothy Jaeryang Baek 409fb39717 refac 2026-07-21 13:53:30 -04:00
Timothy Jaeryang Baek 6940297486 refac 2026-07-20 22:27:09 -04:00
Timothy Jaeryang Baek 49e57f4e7e chore: format 2026-07-20 22:11:42 -04:00
Timothy Jaeryang Baek 2fcb36267f refac 2026-07-20 01:33:53 -04:00
Timothy Jaeryang Baek 421da67446 refac 2026-07-17 05:15:09 -04:00
Timothy Jaeryang Baek a6fcc61a16 refac 2026-07-17 00:55:24 -04:00
Timothy Jaeryang Baek ce44b90eae refac 2026-07-17 00:54:13 -04:00
Timothy Jaeryang Baek 27d7eafcd9 refac 2026-07-17 00:16:01 -04:00
Timothy Jaeryang Baek d7f33996ee refac 2026-07-16 02:49:21 -04:00
Timothy Jaeryang Baek 9be11883b8 refac 2026-07-16 02:05:08 -04:00
Timothy Jaeryang Baek 933ab1e1cd refac 2026-07-15 18:03:36 -04:00
Timothy Jaeryang Baek db934a3b4f refac 2026-07-15 16:51:08 -04:00
Timothy Jaeryang Baek 29782aba01 refac 2026-07-15 16:26:40 -04:00
Timothy Jaeryang Baek 609cc6ad9b refac 2026-07-15 16:26:31 -04:00
Timothy Jaeryang Baek 727041da78 refac 2026-07-15 05:49:48 -04:00
Timothy Jaeryang Baek f8ea15b84a refac 2026-07-15 05:38:44 -04:00
Timothy Jaeryang Baek 3ce3c52936 refac 2026-07-15 05:17:41 -04:00
Timothy Jaeryang Baek 343eb1d659 refac 2026-07-15 04:52:06 -04:00
Timothy Jaeryang Baek 1760b073c7 refac 2026-07-15 04:39:37 -04:00
Timothy Jaeryang Baek 59fc600b52 refac 2026-07-15 04:33:06 -04:00
Timothy Jaeryang Baek f8350360df refac 2026-07-15 04:12:11 -04:00
Timothy Jaeryang Baek 05e3f71317 refac 2026-07-15 04:01:23 -04:00
Timothy Jaeryang Baek fee4c280f8 refac 2026-07-15 03:22:29 -04:00
Timothy Jaeryang Baek 3ff20b210e refac 2026-07-15 03:13:37 -04:00
Timothy Jaeryang Baek d300522e96 refac 2026-07-15 03:11:15 -04:00
Timothy Jaeryang Baek 622767d724 refac 2026-07-15 02:49:46 -04:00
Timothy Jaeryang Baek b2769f831e refac 2026-07-15 02:07:39 -04:00
Timothy Jaeryang Baek 804ec68a6b refac 2026-07-15 02:01:45 -04:00
Timothy Jaeryang Baek c64fe45376 refac 2026-07-15 01:22:51 -04:00
Timothy Jaeryang Baek c1460570b7 refac 2026-07-15 00:40:20 -04:00
Timothy Jaeryang Baek e05f9fa17e refac 2026-07-15 00:30:28 -04:00
Timothy Jaeryang Baek 63ada24706 refac 2026-07-15 00:14:01 -04:00
Timothy Jaeryang Baek 3be493f5b0 refac 2026-07-14 04:53:37 -04:00
Timothy Jaeryang Baek aedb6bef4e refac 2026-07-14 04:15:20 -04:00
Timothy Jaeryang Baek 04b146f2ce refac 2026-07-14 03:52:59 -04:00
Timothy Jaeryang Baek 6e14d0d627 refac 2026-07-14 01:39:40 -04:00
Timothy Jaeryang Baek 34813573fa refac 2026-07-14 01:34:41 -04:00
Timothy Jaeryang Baek caa2457c17 refac 2026-07-14 00:42:47 -04:00
Timothy Jaeryang Baek 7088d245bb refac 2026-07-14 00:10:28 -04:00
Timothy Jaeryang Baek 252e6fd855 refac 2026-07-09 17:30:02 -05:00
Timothy Jaeryang Baek 951f96021a refac 2026-07-09 17:29:51 -05:00