No. VIIColour Application

When to use which
colour, on what.

Colour chapter names the tokens. This chapter names where they go. The Polaris bridge translates Shopify's colour roles into ours; the decision tree resolves the three questions that drift most; the by-element lookup is the table designers and Claude both reach for first.

1 Polaris bridge 3 Decision-tree questions 34 Element rules 7 States per element
IThe Polaris bridge

Polaris speaks role. The brand speaks colour. The translation goes one way.

The admin app inherits Polaris semantics (Critical, Warning, Success, Highlight, Subdued) but renders them in BetterReviews tokens. The mapping is one-way: Polaris role → brand token, never the reverse. Shopify green, Shopify red, and Shopify blue do not appear in the brand under any circumstances, including in error states.

Polaris role Polaris colour BetterReviews token Why
Primary action #008060 green bg-clay · paper text · pill Primary = go. Clay fill (#CC6633), paper text, 999px pill. The only brand element that uses a saturated clay-family fill. If it’s a fill, it’s the positive primary.
Critical (errors) #D72C0D red paper · 1.5px burnt-clay border · filled octagon icon Critical = stop. Never a fill · a fill is reserved for the positive primary action. Critical reads as paper ground + a heavier 1.5px burnt-clay (#7A3216) outline + a filled warning-octagon-fill icon. The fill lives in the icon, never the chrome.
Warning #FFC453 yellow paper · 1px clay hairline · outline triangle icon Warning = review. Paper ground, 1px clay hairline (lighter than Critical), burnt-clay text, outline warning-triangle icon. Reads as a quiet note.
Success (state) #00A881 green moss chip The reserved-moss rule: moss for product success only, never marketing. Never the Shopify green.
Highlight (info) #0095F2 blue peacock soft chip Peacock is the cool accent slot. Bordered, not filled, when used outside its drenched band.
Subdued text #6D7175 cool grey paper-text-3 · stone The no-cold-neutral rule. The brand's muted text trends warm-earth, not cool-grey.
Page background #F6F6F7 cool paper · Cloud Dancer Cloud Dancer is the canonical paper. The Polaris cool-grey ground belongs to a different brand.
Body text #202223 near-black ink · Midnight Midnight is the canonical ink. Black is banned; Polaris's near-black has the wrong undertone.
AI-generated content none (Polaris has no AI role) viola hairline + text Viola is the brand's AI accent. Reserved for evidence (cited sentences, generated summaries), never for affordances (sparkle buttons, AI badges). See § VII.

Implementation note. Polaris's React components accept colour roles by name, not by hex. The admin prototype overrides the role tokens in tailwind.config.js so semantic Polaris classes (`bg-critical`, `text-success`) resolve to BetterReviews colours. Never reach for Polaris hex literally.

AMOLED safety

Midnight (#0B1018) is deliberately not pure #000. On OLED panels, true black causes adjacent-pixel smearing on motion and crushes faint borders. Our ink stays at ~3% lift to keep the hairline scale legible while still reading as black on every other surface.

Cross-platform adaptation

When the admin embeds in Shopify's Polaris chrome, keep Paper + Ink + Clay but adopt Polaris spacing and shape tokens. Inside Slack OAuth, partner connectors, or third-party iframes: dial back to a hairline mark + Clay accent only.

IIThe decision tree

Three questions, resolved.

These three drift the most. Memorise the answers; the rest follows.

Q1Clay, or gold?
IfText size ≥ 18px, or ≥ 14px and bold Thentext-clay (#CC6633) · the canonical Terracotta
IfText size < 18px and not bold (links, eyebrows, icons, captions) Thentext-gold (#9E4615) · the AA-safe clayDeep variant. Same brand colour, different L\* for fine text.
IfBackground (chip, button, drenched band, hero accent) Thenbg-clay with paper text. Never bg-gold; clayDeep on a fill loses the warm-peach feel.
Q2Peacock · ground, or text?
GroundFull-bleed drenched band only. Stretches the section width edge-to-edge. The Refusals marquee on the landing page is the canonical use.
ChipBordered, not filled. border: 1px solid peacock with bg-peacock-bg (the soft tint) and text-peacock. Used for "Cited" status only.
TextNever. Peacock as a body or label colour reads as a Polaris highlight. If you need cool-toned text, use ink + the peacock soft chip behind it.
Q3Surface, or surface-2, or surface-3?
surfacePage canvas. Cloud Dancer (#F0EEE6) on the main column. Default for everything that is not a card.
surface-2Cards, inputs, table headers, popovers. One step deeper (#E8E4D9). Reads as "lifted, but not floating".
surface-3Pressed, selected, or active rows. Two steps deeper (#DDD8CB). Only used as an interactive feedback state, never as a resting fill.
Q4Clay-soft (suggestion) or Viola (evidence)?
Clay-softWhen the AI is offering an action. Draft replies, suggested keywords, sparkle prompts. The accent says “we drafted this, you decide.”
ViolaWhen the AI is presenting evidence. Cited sentences, generated summaries, the engine’s analysis. The accent says “an answer-engine quoted this; you didn’t write it.”
NeitherIf the model is doing background work the user doesn’t need to know about (indexing, embedding, scoring): no colour. The engine is invisible by default.
IIIBy UI element · the lookup table

Thirty-four elements, named.

Sorted by surface (Page · Type · Buttons · Fields · Cards · Chips · Tables · Nav · Feedback). Find the row, read the token.

Element Token Note
PAGE
Page backgroundbg-paper · #F0EEE6Cloud Dancer. The default ground for every product surface.
Hero / anchor sectionbg-ink · #0B1018Midnight. Marketing only; admin keeps paper.
Drenched bandbg-peacock · #1E6B73Edge-to-edge only. The Refusals strip.
TYPE
Display headline · h1text-inkSolid Midnight. Never clay at display size.
Section head · h2 / h3text-inkSame. Hierarchy from size, not colour.
Bodytext-paper-text-2 (88% ink)A notch off pure ink for reading comfort.
Meta / captiontext-paper-text-3 (72% ink)Smallcaps chrome, tabular numerals, datestamps.
Inactive / breadcrumbtext-paper-text-4 (56% ink)Lowest legal opacity on body type.
Inline accent (display)text-clay≥ 18px or ≥ 14px bold only. ≤10% per screen.
Inline accent (body / link)text-gold (#9E4615)The AA-safe clayDeep variant for small text.
BUTTONS
Primary CTAbg-clay text-paperThe only primary fill. Pill, 999px radius.
Primary hoverbg-clay-warm (#D87543)The single legal use of clay-warm.
Secondary CTAbg-paper text-ink border-inkHairline pill. Same shape, different weight.
Tertiary / text-onlytext-ink + underline-on-hover (clay)No background. Hover paints clay underline.
Destructivebg-paper text-clay border-clayClay border, clay text, paper ground. Warning icon required.
FIELDS
Resting underlineborder-paper-line (#C8C0AE)No box. Hairline under the input.
Focus underline + ringborder-clay + 2px clay outline at 3px offsetThe brand's only sharp colour ring.
Placeholder texttext-paper-text-3Never the same colour as the typed value.
Error underline + messageborder-clay + clay text + warning iconColour alone is not enough; icon disambiguates.
CARDS
Default card groundbg-paper-2 + border-ruleHairline first; reach for shadow only when truly floating.
Hover+ shadow-liftNo transform. Just-perceptible elevation.
Selected / activebg-paper-3 + clay 1px borderThe border, not the fill, communicates selection.
CHIPS
Approvedbg-moss-soft text-mossReserved-moss rule. Product only.
Needs attentionbg-clay-soft text-clayInherits primary accent; reads as soft warning.
Citedbg-peacock-bg text-peacock border-peacockBordered, not filled. The only peacock-outside-band exception.
Pendingbg-paper-2 text-paper-text-3Inert. No status colour.
TABLES
Row separatorborder-rule · 1px hairlineNo zebra striping. Hairline is enough.
Headerbg-paper-2 text-paper-text-3Smallcaps, tracked, sticky on scroll.
Selected rowbg-paper-3 + clay 1px left edgeThe only legal use of a coloured left edge.
NAV
Side-link restingtext-paper-text-2Ink at 88%. Reads as available, not loud.
Side-link activetext-ink + clay 1px left edgeSelected uses the same affordance as table rows.
FEEDBACK
Toast · successmoss icon + ink textIcon carries the colour; copy stays ink.
Toast · attentionclay icon + ink textSame pattern. Severity is in the copy.
Toast · progresspeacock icon + ink textSingle peacock-outside-band exception, paired with an icon.
Empty statepaper-text-3 icon + ink h3 + bodyNo colour required. Empty is information.
AI
AI suggestion (draft reply, keyword prompt)bg-clay-soft + sparkle iconAction-shaped. The user accepts or rewrites. Lives next to clay because it’s an invitation to act.
AI evidence (cited quote, generated summary)border-viola text-viola bg-paperEvidence-shaped. The user reads, doesn’t act. Viola hairline + viola text on paper; never viola fill.
Citation source labeltext-viola smallcaps“CITED BY CHATGPT · PERPLEXITY” · the engine that quoted the sentence.
Background AI work (indexing, scoring)no colourThe engine is invisible by default. Surface only when the user needs to act on it.
IVBy state · what every interactive does

The matrix. Seven states. Six elements.

Element
Default
Hover
Active
Focus
Loading
Disabled
Error
Primary CTA
bg-clay
paper text
bg-clay-warm
bg-clay -10% L*
+ 2px clay ring
spinner · clay
40% opacity
·
Secondary
border-ink
ink text
bg-ink
paper text
bg-ink-2
+ 2px clay ring
spinner · ink
40% opacity
·
Field
paper-line under
ink under
clay under
clay under + ring
·
paper-3 ground
clay under + icon
Card
border-rule
+ shadow-lift
·
+ 2px clay ring
skeleton paper-2
50% opacity
border-clay
Side-link
paper-text-2
ink
ink + clay edge
2px clay ring
·
paper-text-4
·
Chip
see roles in §III
+ 1 step darker
·
+ 2px clay ring
·
paper-2 / text-4
clay-soft / clay

The cells marked "·" mean the state does not apply to that element. Every interactive element must implement every applicable state. Missing a state is a defect, not an omission.

VAnti-patterns · lifted from the prototype audit

Six application failures the audit script catches.

01

text-clay on small text.

text-clay on a 13px caption fails AA (3.6:1). Use text-gold. The audit script greps for the pattern text-(sm|xs|\[1[0-3]px\]) alongside text-clay and flags every hit.

02

Hard-coded clay hex.

Literal #CC6633 outside tailwind.config.js or the token file. When the brand updates a shade, hard-coded hex strands the component on the old colour. Always reach for the Tailwind utility.

03

Polaris green leaking through.

Anywhere a Polaris primary-action component renders without the token override. #008060 shows up in screenshots when Tailwind's --p-color-bg-fill-brand override is missing. The audit catches it at the CSS layer.

04

Gradient text.

Any bg-clip-text text-transparent with a gradient fill. The brand uses solid colour. The .text-gradient-gold class is kept for back-compat but resolves to a solid clayDeep fill.

05

Side-stripes.

border-l-2 or larger on a card with a coloured border is banned (with the single exception of the 1px clay edge on selected rows). Use a full hairline border or none.

06

#fff / #000 literals.

Pure white and pure black are banned everywhere. The audit greps for #fff, #000, bg-white, text-white, bg-black, text-black. Always Paper or Ink.

VIIThe AI accent · Viola

Viola is for evidence, not affordances.

Viola (#515299) is reserved for AI-generated content the user reads as evidence: cited sentences, model-generated summaries, engine attribution. It is not the colour of buttons, badges, or sparkle prompts. Those use clay-soft because they ask the user to act. The rule is action vs. evidence; the colours follow.

SUGGESTION · CLAY-SOFT
AI DRAFT REPLY

Thank you, Eleanor. Yes · we formulated the sensitive-skin cleanser exactly for this. The rosemary you noticed is from our own farm in Provence…

Action-shaped. The user decides whether to send. Clay-soft + sparkle invites a choice; it never claims to be the user’s own voice.

EVIDENCE · VIOLA
CITED BY CHATGPT · PERPLEXITY · GOOGLE AI

“doesn’t strip everything, smells like rosemary not perfume”

Eleanor M. · 14 February 2026 · verified buyer

Evidence-shaped. The user reads; an engine quoted this customer. Viola hairline + viola attribution names the AI without colouring the customer’s voice itself.

Viola allowed
  • Citation source labels (“CITED BY CHATGPT”)
  • Hairline frame around quoted customer language
  • Generated summary block in dashboards
  • “Answered for you” evidence cards in the engine view
Viola banned
  • Buttons, CTAs, primary actions (those are clay)
  • Sparkle icons on suggestions (those are clay-soft)
  • Page-level grounds or drenched bands
  • Text body, headlines, links
  • Decorative chips that don’t name an engine

The principle behind the colour. Generative engines are now the brand’s shelf. Naming them in viola gives the user (the merchant) a clear visual cue when they are looking at an AI’s claim versus their own customer’s words. Conflating the two would be the worst kind of trust failure.

VIIIPaint counter · the live audit

Drop in a screenshot. Read the percentages.

The One Voice rule says clay covers ≤10% of any screen. This widget measures it. Drop a PNG or JPG of any BetterReviews surface into the well below; the page samples its pixels and reports clay coverage, ink coverage, paper coverage, plus any banned hex literals found.

Drop a screenshot here
PNG / JPG · max 4096 px · never uploaded

All processing is local. Your image is never uploaded.

IXThe single test

Squint at the screen. Count clay pixels.

The One Voice Rule is the simplest application check. If clay covers more than ten percent of the screen, the design is wrong. Squint at it. If the clay area looks like a paragraph, it is too much; if it looks like a punctuation mark, it is right.

The Polaris-bridge, the decision tree, the by-element table, the state matrix, the anti-patterns: all five exist to keep that single test passable without thinking about it. When a screen passes the squint, it has almost certainly satisfied the other four chapters automatically.