um sistema de cores

Cores que foram resolvidas, não escolhidas.

A maioria dos sistemas de cores é uma lista de valores hexadecimais que alguém escolheu. Este é a saída de um compilador: cada passo de cada rampa foi resolvido contra um alvo de contraste perceptual, em todas as paletas, e verificado antes de ser publicado. Vincule um arquivo e você tem tudo — claro e escuro inclusos.

InstalarVer as paletas

Esta amostra é #bf8253 — o passo solid da família accent. Ela não foi escolhida. Seu matiz veio da medição de uma paleta existente, sua luminosidade foi resolvida a partir de um alvo de contraste, e seu croma é 62% do máximo que o sRGB consegue exibir naquela luminosidade e naquele matiz.

oklch(0.6584 0.0985 57.71)

  • 39paletas
  • 24passos neutros
  • 12papéis por família
  • 2gamuts

Instalar

Escolha o que combina com você. Cada um está completo — não existe passo dois.

<link rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/@noctua-world/colors/system/css/palette/ochre-balanced.css">

Isso é uma paleta, completa: a rampa neutra, todos os nomes semânticos e os dois modos — 29 KB na rede. O arquivo com as 39 paletas tem 741 KB, e é por isso que o pequeno existe. Use-o apenas se seus usuários trocarem de paleta em tempo de execução.

A paleta

Cada família em cada tema, nos dois modos. Toque em qualquer amostra para copiá-la — como hexadecimal, OKLCH, variável CSS, caminho Rust ou classe Tailwind.

neutral

matiz 59°

neutral-cool

matiz 250°

neutral-warm

matiz 42°

accent

matiz 59°

danger

matiz 31°

warning

matiz 90°

success

matiz 144°

info

matiz 232°

urgent

matiz 45°

waiting

matiz 118°

active

matiz 203°

progress

matiz 264°

chart

categórica

chart-alt

categórica

chart-wide

categórica, rotulada

chart-trio

categórica

level

ordenada

magnitude

ordenada

Os papéis são canônicos; os números são apelidos para interoperabilidade. 2 gamuts emitidos por token.

neutral

matiz 59°

neutral-cool

matiz 250°

neutral-warm

matiz 42°

accent

matiz 59°

danger

matiz 31°

warning

matiz 90°

success

matiz 144°

info

matiz 232°

urgent

matiz 45°

waiting

matiz 118°

active

matiz 203°

progress

matiz 264°

chart

categórica

chart-alt

categórica

chart-wide

categórica, rotulada

chart-trio

categórica

level

ordenada

magnitude

ordenada

Os papéis são canônicos; os números são apelidos para interoperabilidade. 2 gamuts emitidos por token.

Escalas neutras

Separada dos doze papéis funcionais e compartilhada pelos dois modos. Interfaces precisam de uma resolução de cinzas bem mais fina que doze passos, e precisam dela concentrada onde as superfícies realmente ficam — logo abaixo do branco e logo acima do preto — em vez de distribuída por igual.

As escalas fria e quente têm exatamente as mesmas luminosidades em outra temperatura — o posicionamento dos passos depende apenas da quantidade e da densidade, então gray-7 e gray-cool-7 diferem só no matiz, e uma pode substituir a outra sem mover nenhum contraste.

--nc-gray-*

--nc-gray-cool-*

--nc-gray-warm-*

Contextos

Todos os nomes que uma aplicação pode usar. Dez deles são famílias com matiz própria, porque seus significados precisam ser distinguidos sem legenda; o resto são apelidos para uma dessas, porque uma família custa uma escala inteira em cada tema, modo e gamut, e um apelido custa uma linha.

Cor sozinha não separa dez significados para um dicromata — medido, e publicado em system/reports/colour-vision.md. Acompanhe uma cor de estado com um ícone ou um rótulo.

349 contextos

accent · 30 contextos
  • accent
  • highlight
  • new
  • experimental
  • alpha
  • beta
  • preview
  • canary
  • nightly
  • prerelease
  • launched
  • featured
  • pinned
  • starred
  • favorite
  • bookmarked
  • recommended
  • popular
  • trending
  • top
  • limited
  • exclusive
  • premium
  • pro
  • pilot
  • prototype
  • earlyaccess
  • admin
  • owner
  • moderator
danger · 36 contextos
  • danger
  • error
  • negative
  • rejected
  • declined
  • critical
  • fatal
  • severe
  • failed
  • failing
  • canceled
  • aborted
  • terminated
  • withdrawn
  • revoked
  • suspended
  • banned
  • forbidden
  • unauthorized
  • unreachable
  • outage
  • unsupported
  • invalid
  • chargeback
  • voided
  • refunded
  • undelivered
  • unavailable
  • bounced
  • spam
  • high
  • unsafe
  • insecure
  • compromised
  • breached
  • vulnerable
warning · 31 contextos
  • warning
  • delayed
  • caution
  • minor
  • unresolved
  • conflict
  • degraded
  • unstable
  • unhealthy
  • deprecated
  • outdated
  • downgraded
  • expiring
  • overdue
  • unpaid
  • backordered
  • overflow
  • stale
  • slow
  • suboptimal
  • decreased
  • falling
  • medium
  • unsigned
  • untrusted
  • noncompliant
  • unlicensed
  • offtrack
  • behind
  • postponed
  • rescheduled
success · 67 contextos
  • success
  • positive
  • finished
  • complete
  • done
  • resolved
  • restored
  • merged
  • solved
  • approved
  • accepted
  • enabled
  • visible
  • public
  • shared
  • external
  • authorized
  • healthy
  • stable
  • operational
  • supported
  • updated
  • upgraded
  • migrated
  • released
  • restocked
  • deployed
  • built
  • tested
  • passing
  • installed
  • synced
  • uploaded
  • downloaded
  • verified
  • validated
  • valid
  • confirmed
  • renewed
  • paid
  • settled
  • captured
  • delivered
  • available
  • preorder
  • created
  • published
  • duplicated
  • checked
  • optimal
  • increased
  • rising
  • steady
  • peak
  • low
  • safe
  • secure
  • encrypted
  • signed
  • trusted
  • patched
  • compliant
  • certified
  • licensed
  • ontrack
  • ahead
  • concluded
info · 26 contextos
  • info
  • normal
  • default
  • notice
  • hint
  • tip
  • open
  • reopened
  • answered
  • duplicate
  • needsinfo
  • maintenance
  • free
  • trial
  • quoted
  • invoiced
  • billed
  • edited
  • modified
  • renamed
  • moved
  • imported
  • exported
  • final
  • member
  • returning
urgent · 20 contextos
  • urgent
  • alert
  • major
  • stalled
  • blocked
  • timeout
  • expired
  • retried
  • escalated
  • disputed
  • flagged
  • reported
  • required
  • mandatory
  • quarantined
  • isolated
  • throttled
  • ratelimited
  • overloaded
  • congested
waiting · 22 contextos
  • waiting
  • pending
  • queued
  • scheduled
  • standby
  • idle
  • submitted
  • resubmitted
  • review
  • appealed
  • reserved
  • booked
  • occupied
  • invited
  • snoozed
  • unread
  • unseen
  • onhold
  • upcoming
  • provisional
  • tentative
  • waitlist
active · 17 contextos
  • active
  • running
  • busy
  • ready
  • resumed
  • online
  • connected
  • live
  • realtime
  • assigned
  • claimed
  • joined
  • focused
  • selected
  • fresh
  • cached
  • ongoing
progress · 29 contextos
  • progress
  • sent
  • received
  • loading
  • initializing
  • starting
  • stopping
  • retrying
  • processing
  • recovering
  • reconnecting
  • migrating
  • staged
  • deploying
  • building
  • testing
  • installing
  • updating
  • syncing
  • uploading
  • downloading
  • shipped
  • transit
  • dispatched
  • packing
  • ordered
  • returned
  • onboarding
  • offboarding
neutral · 71 contextos
  • inactive
  • draft
  • archived
  • paused
  • subtle
  • silent
  • debug
  • disabled
  • stopped
  • skipped
  • partial
  • closed
  • dismissed
  • wontfix
  • ignored
  • unanswered
  • locked
  • unlocked
  • frozen
  • hidden
  • private
  • internal
  • restricted
  • readonly
  • editable
  • offline
  • disconnected
  • dormant
  • lapsed
  • legacy
  • obsolete
  • retired
  • discontinued
  • unreleased
  • reverted
  • rollback
  • uninstalled
  • unsynced
  • unverified
  • unconfirmed
  • vacant
  • unclaimed
  • unassigned
  • unselected
  • read
  • seen
  • replied
  • forwarded
  • unchanged
  • unpublished
  • deleted
  • empty
  • truncated
  • collapsed
  • expanded
  • filled
  • full
  • optional
  • inherited
  • custom
  • system
  • automatic
  • manual
  • overridden
  • indeterminate
  • unchecked
  • sandboxed
  • anonymous
  • guest
  • deactivated
  • silenced

Escalas categóricas

Matizes distribuídas ao redor do círculo, não ao longo de um caminho, em intervalos perceptuais iguais e não em ângulos iguais — uma rotação fixa pelos verdes muda muito menos a aparência que a mesma rotação pelos azuis. Cada conjunto também percorre uma faixa de luminosidade, porque a matiz é exatamente o eixo que falta a um dicromata, e a luminosidade é o que sobra.

Seis é o que um conjunto gerado consegue manter distinguível sob as três dicromacias. Um conjunto marcado como rotulado passa disso de propósito e diz isso: sua legenda precisa nomear cada série, e as margens medidas são publicadas em system/reports/colour-vision.md em vez de ignoradas.

chart123456
chart-alt123456
chart-wide123456789101112
chart-trio123

Escalas ordenadas

Um semáforo, lido em ordem. Os passos são espaçados por distância perceptual ao longo do caminho de matiz, e não igualmente no parâmetro, e a luminosidade desce em passos iguais de índice — porque a luminosidade é o único eixo que sobra quando a matiz falta, e só o índice garante que o passo seja igual.

level012345678910
magnitudelowerlowmediumhighhigher

Translucidez

Alfa real, não um hex resolvido para compor sobre um fundo fixo. Cada passo é color-mix(in oklab, <token> N%, transparent), que é pré-multiplicado — então é o token naquela opacidade e compõe corretamente sobre qualquer coisa. Mostrado aqui sobre duas superfícies diferentes por esse motivo.

Nenhuma verificação de contraste pode auditá-los: contraste é uma propriedade de duas cores opacas, e uma camada translúcida não tem nenhum antes de ser composta.

surface
surface-raised

Em contexto

Uma paleta se julga em uso, não como uma grade de quadrados. Tudo abaixo é construído com os tokens semânticos e acompanha o tema e o modo selecionados acima.

Implantação

saudável
Requisições
18.402
p99
42 ms
Erros
0,02%

Notificações

Compilação falhou

Três alvos de contraste não foram atingidos na família accent.

Margem de visão de cores

success e danger ficam próximos sob deuteranopia.

Regerado

29 arquivos escritos em system/.

Nova família

Integrar

Os artefatos gerados são versionados, então todo caminho de consumo funciona sem etapa de build: submódulo, subtree, checkout esparso, cópia simples ou URL direta.

<!-- three files: the dense grays, the semantic contract, and
     the default theme's values -->
<link rel="stylesheet" href="system/css/ramp.css">
<link rel="stylesheet" href="system/css/contexts.css">
<link rel="stylesheet" href="system/css/ochre-balanced.css">

<!-- or index.css: all of the above plus every other theme, and a name
     that survives a theme being renamed -->

.card {
  background: var(--nc-color-surface-raised);
  color: var(--nc-color-fg);
  border: 1px solid var(--nc-color-border);
}

Por que estas cores são confiáveis

Nada aqui foi escolhido a olho. A saturação de uma cor é armazenada como uma fração do máximo que uma tela consegue realmente exibir naquela luminosidade e matiz, então o mesmo token fica mais rico em uma tela de gamut amplo sem ser redefinido. E a luminosidade de um passo é resolvida a partir de um alvo de contraste usando APCA, que — ao contrário do WCAG 2.x — modela polaridade, e portanto não avalia um par escuro fraco demais como melhor que um par claro confortável.

Cada build executa 48.441 verificações em todas as paletas, modos e pares, e falha em uma regressão. A simulação de visão de cores também roda — e onde um par realmente não pode ser distinguido, isso é publicado em vez de escondido.

São 39 paletas, e todas passaram pelos mesmos portões.

Como funciona, na íntegra