Skip to main content
Gremorie
Semantic

Colors

Mapeamento intenção → valor para os sete temas Gremorie, em light e dark mode.

Tokens semânticos são intenções: primary, foreground, border. Cada tema preenche essas intenções com valores diferentes, e cada modo (light / dark) traz seu próprio mapeamento. Esta página é a tabela de verdade para os sete temas embarcados: Default, Claude, ChatGPT, Gemini, Perplexity, Mistral e Purple.

Como ler as tabelas

  • As colunas Light e Dark renderizam o valor exato declarado como um chip sobre o próprio background light ou dark do tema, então as duas são fiéis independente do modo em que você está lendo.
  • As colunas Valor mostram o que o tema declara: um nome de primitivo (um alias na fonte DTCG, escrito no CSS como var(--color-<token>)) ou, onde o tema espelha uma superfície de produto sem primitivo equivalente, um valor OKLCH literal.
  • O badge base indica que o tema não sobrescreve aquele token; ele herda o valor da camada base (semantic/light.json e semantic/dark.json). Essa herança é o comportamento que embarca, não uma omissão.

Se você está auditando um componente que parece "errado" em algum tema, comece por aqui. Comparar a intenção (e.g. --primary) com o valor resolvido em cada tema diz se a inconsistência é da chrome do componente ou do mapeamento do tema.

Default

A propria camada semantica base, sobre a rampa gray neutralizada. Conservador e sem marca; todos os outros temas sao camadas de override por cima dele.

--radius-base: 0.625rem · selector :root

LightDarkTokenValor (light)Valor (dark)
--backgroundgray-50basegray-950base
--foregroundgray-950basegray-50base
--cardgray-0basegray-900base
--card-foregroundgray-950basegray-50base
--popovergray-0basegray-900base
--popover-foregroundgray-950basegray-50base
--primarygray-900basegray-100base
--primary-foregroundgray-50basegray-900base
--secondarygray-100basegray-800base
--secondary-foregroundgray-900basegray-50base
--mutedgray-100basegray-800base
--muted-foregroundgray-500basegray-400base
--accentgray-100basegray-800base
--accent-foregroundgray-900basegray-50base
--destructivered-600basered-400base
--destructive-foregroundgray-50basegray-50base
--warningamber-500baseamber-400base
--warning-foregroundgray-950basegray-950base
--successgreen-700basegreen-400base
--success-foregroundgray-50basegray-950base
--bordergray-200baseoklch(1 0 0 / 10%)base
--inputgray-200baseoklch(1 0 0 / 15%)base
--ringgray-400basegray-500base
--chart-1blue-500baseblue-600base
--chart-2amber-500baseamber-600base
--chart-3green-500basegreen-600base
--chart-4cyan-500basecyan-600base
--chart-5pink-500basepink-600base
--sidebargray-50basegray-900base
--sidebar-foregroundgray-950basegray-50base
--sidebar-primarygray-900basegray-100base
--sidebar-primary-foregroundgray-50basegray-900base
--sidebar-accentgray-100basegray-800base
--sidebar-accent-foregroundgray-900basegray-50base
--sidebar-bordergray-200baseoklch(1 0 0 / 10%)base
--sidebar-ringgray-400basegray-500base

Claude

Clay quente (terracota coral) sobre superficies creme, apoio em taupe, display serifado. O dark mode usa o carvao quente do produto real.

--radius-base: 0.5rem · selector [data-theme='claude']

LightDarkTokenValor (light)Valor (dark)
--backgroundoklch(0.965 0.011 92)oklch(0.235 0.006 100)
--foregroundgray-950gray-50
--cardoklch(0.985 0.008 92)oklch(0.268 0.005 100)
--card-foregroundgray-950gray-50
--popoveroklch(0.985 0.008 92)oklch(0.268 0.005 100)
--popover-foregroundgray-950gray-50
--primaryclay-500clay-400
--primary-foregroundgray-50gray-950
--secondaryoklch(0.95 0.012 80)oklch(0.28 0.012 58)
--secondary-foregroundclay-900gray-50
--mutedoklch(0.95 0.012 80)oklch(0.28 0.012 58)
--muted-foregroundtaupe-600taupe-300
--accentclay-100clay-900
--accent-foregroundclay-900clay-50
--destructivered-600basered-400base
--destructive-foregroundgray-50basegray-50base
--warningamber-500baseamber-400base
--warning-foregroundgray-950basegray-950base
--successgreen-700basegreen-400base
--success-foregroundgray-50basegray-950base
--borderoklch(0.9 0.014 78)oklch(1 0 0 / 10%)
--inputoklch(0.9 0.014 78)oklch(1 0 0 / 15%)
--ringclay-500clay-400
--chart-1blue-500baseblue-600base
--chart-2amber-500baseamber-600base
--chart-3green-500basegreen-600base
--chart-4cyan-500basecyan-600base
--chart-5pink-500basepink-600base
--sidebaroklch(0.97 0.01 84)oklch(0.24 0.012 60)
--sidebar-foregroundgray-950gray-50
--sidebar-primaryclay-600clay-400
--sidebar-primary-foregroundgray-50gray-950
--sidebar-accentclay-100oklch(0.28 0.012 58)
--sidebar-accent-foregroundclay-900gray-50
--sidebar-borderoklch(0.9 0.014 78)oklch(1 0 0 / 10%)
--sidebar-ringclay-500clay-400

ChatGPT

Acento emerald sobre superficie flat de sombras suaves. O dark mode usa o grafite flat do produto real; as demais superficies herdam a base neutra.

--radius-base: 0.75rem · selector [data-theme='chatgpt']

LightDarkTokenValor (light)Valor (dark)
--backgroundgray-50baseoklch(0.248 0 0)
--foregroundgray-950basegray-50base
--cardgray-0baseoklch(0.278 0 0)
--card-foregroundgray-950basegray-50base
--popovergray-0baseoklch(0.278 0 0)
--popover-foregroundgray-950basegray-50base
--primaryemerald-700emerald-400
--primary-foregroundgray-50gray-950
--secondarygray-100basegray-800base
--secondary-foregroundgray-900basegray-50base
--mutedgray-100basegray-800base
--muted-foregroundgray-500basegray-400base
--accentemerald-100emerald-900
--accent-foregroundemerald-900emerald-50
--destructivered-600basered-400base
--destructive-foregroundgray-50basegray-50base
--warningamber-500baseamber-400base
--warning-foregroundgray-950basegray-950base
--successgreen-700basegreen-400base
--success-foregroundgray-50basegray-950base
--bordergray-200baseoklch(1 0 0 / 10%)base
--inputgray-200baseoklch(1 0 0 / 15%)base
--ringemerald-500emerald-400
--chart-1blue-500baseblue-600base
--chart-2amber-500baseamber-600base
--chart-3green-500basegreen-600base
--chart-4cyan-500basecyan-600base
--chart-5pink-500basepink-600base
--sidebargray-50basegray-900base
--sidebar-foregroundgray-950basegray-50base
--sidebar-primaryemerald-700emerald-400
--sidebar-primary-foregroundgray-50gray-950
--sidebar-accentgray-100basegray-800base
--sidebar-accent-foregroundgray-900basegray-50base
--sidebar-bordergray-200baseoklch(1 0 0 / 10%)base
--sidebar-ringemerald-500emerald-400

Gemini

Azul Google com rampa de marca azul-para-roxo e o radius mais arredondado do conjunto. O dark mode usa o grafite frio do produto real.

--radius-base: 1rem · selector [data-theme='gemini']

LightDarkTokenValor (light)Valor (dark)
--backgroundgray-50baseoklch(0.239 0.002 248)
--foregroundgray-950basegray-50base
--cardgray-0baseoklch(0.274 0.002 248)
--card-foregroundgray-950basegray-50base
--popovergray-0baseoklch(0.274 0.002 248)
--popover-foregroundgray-950basegray-50base
--primaryoklch(0.55 0.19 258)oklch(0.75 0.11 258)
--primary-foregroundgray-50gray-950
--secondarygray-100basegray-800base
--secondary-foregroundgray-900basegray-50base
--mutedgray-100basegray-800base
--muted-foregroundgray-500basegray-400base
--accentindigo-100indigo-900
--accent-foregroundindigo-900indigo-50
--destructivered-600basered-400base
--destructive-foregroundgray-50basegray-50base
--warningamber-500baseamber-400base
--warning-foregroundgray-950basegray-950base
--successgreen-700basegreen-400base
--success-foregroundgray-50basegray-950base
--bordergray-200baseoklch(1 0 0 / 10%)base
--inputgray-200baseoklch(1 0 0 / 15%)base
--ringoklch(0.63 0.18 260)oklch(0.75 0.11 258)
--chart-1blue-500baseblue-600base
--chart-2amber-500baseamber-600base
--chart-3green-500basegreen-600base
--chart-4cyan-500basecyan-600base
--chart-5pink-500basepink-600base
--sidebargray-50basegray-900base
--sidebar-foregroundgray-950basegray-50base
--sidebar-primaryoklch(0.55 0.19 258)oklch(0.75 0.11 258)
--sidebar-primary-foregroundgray-50gray-950
--sidebar-accentgray-100basegray-800base
--sidebar-accent-foregroundgray-900basegray-50base
--sidebar-bordergray-200baseoklch(1 0 0 / 10%)base
--sidebar-ringoklch(0.63 0.18 260)oklch(0.75 0.11 258)

Perplexity

Turquesa verdadeiro sobre offblack, sobrio e compacto, com o menor radius do conjunto. O primary claro e o turquesa de marca #20808D.

--radius-base: 0.375rem · selector [data-theme='perplexity']

LightDarkTokenValor (light)Valor (dark)
--backgroundgray-50baseoklch(0.192 0.02 195.6)
--foregroundgray-950basegray-50base
--cardgray-0baseoklch(0.225 0.018 196)
--card-foregroundgray-950basegray-50base
--popovergray-0baseoklch(0.225 0.018 196)
--popover-foregroundgray-950basegray-50base
--primaryoklch(0.553 0.086 208.5)oklch(0.72 0.11 205)
--primary-foregroundgray-0gray-950
--secondarygray-100basegray-800base
--secondary-foregroundgray-900basegray-50base
--mutedgray-100basegray-800base
--muted-foregroundgray-500basegray-400base
--accentteal-100teal-900
--accent-foregroundteal-900teal-50
--destructivered-600basered-400base
--destructive-foregroundgray-50basegray-50base
--warningamber-500baseamber-400base
--warning-foregroundgray-950basegray-950base
--successgreen-700basegreen-400base
--success-foregroundgray-50basegray-950base
--bordergray-200baseoklch(1 0 0 / 10%)base
--inputgray-200baseoklch(1 0 0 / 15%)base
--ringoklch(0.553 0.086 208.5)oklch(0.72 0.11 205)
--chart-1blue-500baseblue-600base
--chart-2amber-500baseamber-600base
--chart-3green-500basegreen-600base
--chart-4cyan-500basecyan-600base
--chart-5pink-500basepink-600base
--sidebargray-50basegray-900base
--sidebar-foregroundgray-950basegray-50base
--sidebar-primaryoklch(0.553 0.086 208.5)oklch(0.72 0.11 205)
--sidebar-primary-foregroundgray-0gray-950
--sidebar-accentgray-100basegray-800base
--sidebar-accent-foregroundgray-900basegray-50base
--sidebar-bordergray-200baseoklch(1 0 0 / 10%)base
--sidebar-ringoklch(0.553 0.086 208.5)oklch(0.72 0.11 205)

Mistral

Laranja flame com primary preto-sobre-laranja, espelhando o uso de marca da Mistral. As superficies herdam a base neutra nos dois modos.

--radius-base: 0.5rem · selector [data-theme='mistral']

LightDarkTokenValor (light)Valor (dark)
--backgroundgray-50basegray-950base
--foregroundgray-950basegray-50base
--cardgray-0basegray-900base
--card-foregroundgray-950basegray-50base
--popovergray-0basegray-900base
--popover-foregroundgray-950basegray-50base
--primaryorange-600orange-400
--primary-foregroundgray-950gray-950
--secondarygray-100basegray-800base
--secondary-foregroundgray-900basegray-50base
--mutedgray-100basegray-800base
--muted-foregroundgray-500basegray-400base
--accentorange-100orange-900
--accent-foregroundorange-900orange-50
--destructivered-600basered-400base
--destructive-foregroundgray-50basegray-50base
--warningamber-500baseamber-400base
--warning-foregroundgray-950basegray-950base
--successgreen-700basegreen-400base
--success-foregroundgray-50basegray-950base
--bordergray-200baseoklch(1 0 0 / 10%)base
--inputgray-200baseoklch(1 0 0 / 15%)base
--ringorange-500orange-400
--chart-1blue-500baseblue-600base
--chart-2amber-500baseamber-600base
--chart-3green-500basegreen-600base
--chart-4cyan-500basecyan-600base
--chart-5pink-500basepink-600base
--sidebargray-50basegray-900base
--sidebar-foregroundgray-950basegray-50base
--sidebar-primaryorange-600orange-400
--sidebar-primary-foregroundgray-950gray-950
--sidebar-accentgray-100basegray-800base
--sidebar-accent-foregroundgray-900basegray-50base
--sidebar-bordergray-200baseoklch(1 0 0 / 10%)base
--sidebar-ringorange-500orange-400

Purple

Violeta sobre superfícies lavanda, adaptado do preset Purple do Fumadocs (MIT). Dois pares foram corrigidos para WCAG AA: primary-foreground quase branco no light e destructive-foreground quase preto no dark.

--radius-base: 0.625rem · selector [data-theme='purple']

LightDarkTokenValor (light)Valor (dark)
--backgroundoklch(0.9491 0.0278 298.05)oklch(0.1605 0.013 297.13)
--foregroundoklch(0.3035 0.1296 288.37)oklch(0.8926 0.0424 297.73)
--cardoklch(0.9142 0.0337 297.92)oklch(0.1992 0.0236 296.44)
--card-foregroundoklch(0.2481 0.1513 278.88)oklch(0.8926 0.0424 297.73)
--popoveroklch(0.9572 0.0166 298.26)oklch(0.1592 0.015 296.89)
--popover-foregroundoklch(0.2481 0.1513 278.88)oklch(0.8926 0.0424 297.73)
--primaryoklch(0.5379 0.2912 295.26)oklch(0.8366 0.1046 307.06)
--primary-foregroundoklch(0.9764 0.0145 308.3)oklch(0.1434 0.0399 294.09)
--secondaryoklch(0.8983 0.0444 307.91)oklch(0.2979 0.0443 306.78)
--secondary-foregroundoklch(0.1783 0.0597 291.44)oklch(0.8926 0.0424 297.73)
--mutedoklch(0.9357 0.0251 298.1)oklch(0.1992 0.0236 296.44)
--muted-foregroundoklch(0.4838 0.1888 289.71)oklch(0.7413 0.0922 296.32)
--accentoklch(0.8876 0.0356 308.02)oklch(0.3093 0.0463 295.83)
--accent-foregroundoklch(0.2757 0.1499 296.78)oklch(0.8687 0.0418 307.93)
--destructivered-600basered-400base
--destructive-foregroundgray-50basegray-950
--warningamber-500baseamber-400base
--warning-foregroundgray-950basegray-950base
--successgreen-700basegreen-400base
--success-foregroundgray-50basegray-950base
--borderoklch(0.8116 0.0606 307.63 / 0.5)oklch(0.4403 0.1603 303.37 / 0.3)
--inputoklch(0.8116 0.0606 307.63 / 0.5)oklch(0.4403 0.1603 303.37 / 0.3)
--ringoklch(0.5379 0.2912 295.26)oklch(0.8366 0.1046 307.06)
--chart-1blue-500baseblue-600base
--chart-2amber-500baseamber-600base
--chart-3green-500basegreen-600base
--chart-4cyan-500basecyan-600base
--chart-5pink-500basepink-600base
--sidebaroklch(0.9491 0.0278 298.05)oklch(0.1605 0.013 297.13)
--sidebar-foregroundoklch(0.3035 0.1296 288.37)oklch(0.8926 0.0424 297.73)
--sidebar-primaryoklch(0.5379 0.2912 295.26)oklch(0.8366 0.1046 307.06)
--sidebar-primary-foregroundoklch(0.9764 0.0145 308.3)oklch(0.1434 0.0399 294.09)
--sidebar-accentoklch(0.8876 0.0356 308.02)oklch(0.3093 0.0463 295.83)
--sidebar-accent-foregroundoklch(0.2757 0.1499 296.78)oklch(0.8687 0.0418 307.93)
--sidebar-borderoklch(0.8116 0.0606 307.63 / 0.5)oklch(0.4403 0.1603 303.37 / 0.3)
--sidebar-ringoklch(0.5379 0.2912 295.26)oklch(0.8366 0.1046 307.06)

Sobre os tokens de sidebar

Os --sidebar-* são uma família paralela que cobre a chrome de navegação lateral. Eles existem porque sidebars são surfaces muitas vezes pintadas distintas do background (mais escuras, mais claras, contrastantes). Manter intenções dedicadas evita o truque de "background com tint" que se quebra ao mudar de tema.

Sobre os tokens de chart

--chart-1 a --chart-5 são aliases da escala categórica (--chart-cat-1..5), que não é tematizável: todo tema mostra as mesmas cores de série. Veja Tokens de chart.

Editando ou adicionando temas

Temas são camadas de override sobre a camada semântica base. A fonte é JSON DTCG em packages/tokens/tokens/themes/<id>.json; o CSS em packages/tokens/styles/ é gerado a partir dele. A receita curta:

  1. Crie packages/tokens/tokens/themes/<id>.json com os grupos light e dark, e acrescente <id> a THEMES em packages/tokens/pipeline/model.ts.
  2. Sobrescreva apenas o que difere da base, como tokens DTCG: um alias usa o caminho do token ({color.emerald.700}); um literal é um objeto de cor OKLCH. O que o grupo light declarar como cor literal, o grupo dark precisa declarar de novo, porque :root[data-theme] vence .dark.
  3. Gere com nx build tokens. O tema ganha o arquivo CSS, o @import no theme.css e as saídas JSON, TypeScript, Kotlin e Swift.
  4. Audite com nx test tokens: o teste de contraste falha em qualquer par de texto abaixo de 4,5:1 e em qualquer anel de foco abaixo de 3:1, a menos que o par esteja em contrast-deviations.json com o motivo.

Prefira primitivos. Referencie as rampas por alias ({color.<rampa>.<passo>}) para que um ajuste de primitivo cascateie em todos os temas. Os temas embarcados só hardcodam OKLCH onde espelham uma superfície de produto sem primitivo equivalente (e.g. o creme do Claude ou o grafite do Gemini). Se o seu valor é reutilizável, adicione-o como primitivo.

On this page