fix(theme): preserve ghost text contrast
- commit
- 47ad4a2fd8d58ed9419e77af2b2347f848a75de6
- author
- brice · · 2026-08-29 13:06 UTC
- parent
- 179fb63
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +4 -1
M internal/ui/theme/css.go +1 -1
| @@ -504,7 +504,7 @@ entry.omnibox-entry.omnibox-entry-bang-active:focus-visible > text { | |||
| 504 | 504 | /* Ghost text autocomplete overlay - positioned to align with entry text */ | |
| 505 | 505 | .omnibox-ghost { | |
| 506 | 506 | font-size: 1em; | |
| 507 | - | color: alpha(var(--control-text), 0.65); | |
| 507 | + | color: var(--control-text); | |
| 508 | 508 | margin-top: -0.0625em; /* Nudge up 1px to align with entry text baseline */ | |
| 509 | 509 | background-color: transparent; | |
| 510 | 510 | } | |
| @@ -504,7 +504,7 @@ entry.omnibox-entry.omnibox-entry-bang-active:focus-visible > text { | |||||
| 504 | /* Ghost text autocomplete overlay - positioned to align with entry text */ | 504 | /* Ghost text autocomplete overlay - positioned to align with entry text */ | ||
| 505 | .omnibox-ghost { | 505 | .omnibox-ghost { | ||
| 506 | font-size: 1em; | 506 | font-size: 1em; | ||
| 507 | - | color: alpha(var(--control-text), 0.65); | 507 | + | color: var(--control-text); |
| 508 | margin-top: -0.0625em; /* Nudge up 1px to align with entry text baseline */ | 508 | margin-top: -0.0625em; /* Nudge up 1px to align with entry text baseline */ | ||
| 509 | background-color: transparent; | 509 | background-color: transparent; | ||
| 510 | } | 510 | } | ||
M internal/ui/theme/css_test.go +3 -0
| @@ -122,6 +122,9 @@ func TestGenerateCSS_OmniboxSearchEntryUsesControlSurface(t *testing.T) { | |||
| 122 | 122 | if !entryRe.MatchString(css) { | |
| 123 | 123 | t.Fatalf("expected omnibox entry and its text node to use the control surface fill and readable text") | |
| 124 | 124 | } | |
| 125 | + | ghostBlock := cssRuleBlock(t, css, ".omnibox-ghost") | |
| 126 | + | assert.Contains(t, ghostBlock, "color: var(--control-text);") | |
| 127 | + | assert.NotContains(t, ghostBlock, "alpha(var(--control-text)") | |
| 125 | 128 | focusedEntryRe := regexp.MustCompile(`(?s)entry\.omnibox-entry:focus[^\{]*,\s*entry\.omnibox-entry:focus-within[^\{]*,\s*entry\.omnibox-entry:focus-visible[^\{]*,\s*entry\.omnibox-entry:focus\s*>\s*text[^\{]*,\s*entry\.omnibox-entry:focus-within\s*>\s*text[^\{]*,\s*entry\.omnibox-entry:focus-visible\s*>\s*text\s*\{[^}]*background-color:\s*shade\(var\(--surface-variant\),\s*1\.08\);`) | |
| 126 | 129 | if !focusedEntryRe.MatchString(css) { | |
| 127 | 130 | t.Fatalf("expected focused omnibox entry text node to keep a distinct control-surface fill") | |
| @@ -122,6 +122,9 @@ func TestGenerateCSS_OmniboxSearchEntryUsesControlSurface(t *testing.T) { | |||||
| 122 | if !entryRe.MatchString(css) { | 122 | if !entryRe.MatchString(css) { | ||
| 123 | t.Fatalf("expected omnibox entry and its text node to use the control surface fill and readable text") | 123 | t.Fatalf("expected omnibox entry and its text node to use the control surface fill and readable text") | ||
| 124 | } | 124 | } | ||
| 125 | + | ghostBlock := cssRuleBlock(t, css, ".omnibox-ghost") | |||
| 126 | + | assert.Contains(t, ghostBlock, "color: var(--control-text);") | |||
| 127 | + | assert.NotContains(t, ghostBlock, "alpha(var(--control-text)") | |||
| 125 | focusedEntryRe := regexp.MustCompile(`(?s)entry\.omnibox-entry:focus[^\{]*,\s*entry\.omnibox-entry:focus-within[^\{]*,\s*entry\.omnibox-entry:focus-visible[^\{]*,\s*entry\.omnibox-entry:focus\s*>\s*text[^\{]*,\s*entry\.omnibox-entry:focus-within\s*>\s*text[^\{]*,\s*entry\.omnibox-entry:focus-visible\s*>\s*text\s*\{[^}]*background-color:\s*shade\(var\(--surface-variant\),\s*1\.08\);`) | 128 | focusedEntryRe := regexp.MustCompile(`(?s)entry\.omnibox-entry:focus[^\{]*,\s*entry\.omnibox-entry:focus-within[^\{]*,\s*entry\.omnibox-entry:focus-visible[^\{]*,\s*entry\.omnibox-entry:focus\s*>\s*text[^\{]*,\s*entry\.omnibox-entry:focus-within\s*>\s*text[^\{]*,\s*entry\.omnibox-entry:focus-visible\s*>\s*text\s*\{[^}]*background-color:\s*shade\(var\(--surface-variant\),\s*1\.08\);`) | ||
| 126 | if !focusedEntryRe.MatchString(css) { | 129 | if !focusedEntryRe.MatchString(css) { | ||
| 127 | t.Fatalf("expected focused omnibox entry text node to keep a distinct control-surface fill") | 130 | t.Fatalf("expected focused omnibox entry text node to keep a distinct control-surface fill") | ||