feat(appearance): tinge o fundo com a cor de destaque (14 presets + personalizada) - #66
Merged
Merged
Conversation
…ersonalizada) Quando uma cor de destaque está ativa e não há preset arquitetônico, o fundo (--background/--card) recebe um tint sutil derivado da matiz da cor, via CSS relative color — uma única regra serve os 14 presets e a cor personalizada. Um toggle "Fundo tingido pela cor de destaque" (ligado por padrão) controla o efeito; sob um preset arquitetônico ele fica desabilitado, com instrução de como reativar. A lightness é fixada nos valores do tema neutro e o chroma é clampado, então o contraste WCAG AA é preservado em toda matiz — um teste varre as 360 matizes e casa as constantes com o globals.css (trava contra drift). @supports garante fallback seguro em engines sem relative color. Também: - remove tokens --sidebar-* mortos (nenhum componente os referenciava) - corrige overflow horizontal do seletor de Densidade a 320px (reflow WCAG 1.4.10)
O react-doctor@latest passou a tratar no-ref-current-in-render como erro, quebrando o CI do repo — o gate roda @latest (sem pin) e o último verde do main é anterior ao bump. Os 3 pontos (dashboard, histórico, use-supabase-query) são o padrão latest-ref legítimo: ref.current recebe o valor/handler mais recente em render para um listener/effect assinar uma vez. São falsos-positivos; adiciona react-doctor-disable-next-line justificado em cada, no estilo já usado no projeto.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que
Quando você escolhe uma cor de destaque (um dos 14 presets ou uma cor personalizada) e não há preset arquitetônico ativo, o fundo do app passa a receber um tint sutil dessa cor — a mesma linguagem que os presets arquitetônicos já usavam, agora estendida à cor de destaque. Um toggle "Fundo tingido pela cor de destaque" (ligado por padrão, em Configurações → Aparência) liga/desliga o efeito.
Por quê
Antes, só os presets arquitetônicos tingiam o fundo; a cor de destaque deixava o fundo neutro. A personalização ficava pela metade — o accent aparecia nos botões e realces, mas não no ambiente.
Como funciona
Uma única regra CSS deriva a matiz do
--primaryvia relative color:Isso serve os 14 presets e a cor personalizada de uma vez (o
--primaryjá é a cor escolhida em ambos os casos). A lightness é fixada no valor do tema neutro e o chroma é clampado, então o contraste não se move o suficiente para quebrar o AA. O preset arquitetônico mantém precedência sobre o fundo (:not([data-preset])), e@supportsdá fallback seguro — engines sem relative color ficam nos tokens neutros, nunca com um--backgroundinválido.O toggle persiste em
localStorage(padrão idêntico ao "Grid de prancha"), aplicado antes da hidratação pelo script anti-flash. Sob um preset ativo o toggle fica desabilitado, com o motivo e o caminho de reativação (aria-describedby).WCAG AA — como garantimos
src/lib/__tests__/background-tint.test.ts): varre as 360 matizes × 7 chromas de origem exigindo ≥ 4.5:1 em todo par texto/superfície (fg/bg, muted/bg, fg/card, muted/card), e casa as constantes com oglobals.csspara travar drift entre teste e folha de estilo.fg/bg 18.6 · mut/bg 5.7 · mut/card 6.1; escurofg/bg 19.0 · mut/bg 7.7 · mut/card 6.9.--muted-foregroundé levemente escurecido no modo tingido (única erosão real de contraste); no escuro o valor neutro já passa com folga.Também neste PR
--sidebar-*mortos (nenhum componente os referenciava).flex-1ganhammin-w-0 + truncate, evitando que "Confortável" empurre a linha para fora da tela em larguras estreitas.Como verificar
npm testinclui o gate de AA (background-tint.test.ts).