Get started

Brand guidelines to shadcn theme: map decisions to tokens and DESIGN.md

A shadcn theme implements selected brand decisions; it doesn't replace the approved guidelines. Start with a versioned source, map only the decisions it supports, and leave missing decisions unresolved. Installing variables makes a theme available. Named consumer checks show whether the project has actually adopted it.

Updated October 23, 2026

Preserve the source before translating it

Brand guidelines often mix approved rules, examples, suggestions, old material, and unanswered questions. A theme file can't distinguish those categories. Before mapping anything, identify the source by name and version, record who approved it, and state which products, surfaces, modes, locales, and platforms it governs.

Generated CSS variables are downstream output. Component compatibility doesn't make them authoritative. If a generated value conflicts with the current approved guideline, the conflict remains open until an authorized owner resolves it.

  • Source identity and version: the exact guideline, kit, asset release, or decision record.
  • Approval state: approved, conditional, superseded, or unresolved.
  • Scope: covered products, surfaces, modes, locales, and platforms.
  • Decision owner: the role allowed to approve or change the brand decision.
  • Implementation owner: the role responsible for the shadcn mapping.
  • Acceptance owner: the role that can accept, revise, or block the result.
  • Exclusions: behaviors and surfaces the source does not govern.
  • Proof limit: what the source establishes and what still requires project evidence.

Don't complete the brand by accident

If the guide supplies a vivid brand color but never assigns destructive, focus, chart, or dark-mode behavior, those roles remain unresolved. A convenient default may help with a prototype, but it isn't an approved brand decision.

Use shadcn's semantic contract as the target

Shadcn themes describe roles, not loose palettes. Components consume names such as background, foreground, primary, muted, border, input, and ring. Surface roles commonly have corresponding foreground roles. The theme also covers chart and sidebar roles, while radius contributes to the wider visual system.

Instead of asking which brand swatch should replace each default swatch, ask what relationship the source intends for each interface role. A primary action needs a surface and readable content. A muted region needs a background treatment and a foreground hierarchy. A focus ring must remain visible against the components and neighboring colors where it appears.

What it recordsWhat it cannot prove
Approved brand sourcePortable identity intent, approved assets, constraints, and ownershipThat a shadcn project implements the decisions correctly
Shadcn themeReusable semantic values consumed by compatible componentsThat every component uses the intended role or handles every state
DESIGN.mdIntent, composition, usage rules, hierarchy, and prohibitionsThat code resolves the correct variables or renders as intended
Consuming projectMappings, components, exceptions, and observed behaviorThat local choices should replace upstream authority
Each layer makes a different promise.

Review the complete role surface

  • Base surfaces: background and foreground.
  • Contained surfaces: card with card foreground, and popover with popover foreground.
  • Actions and supporting treatments: primary, secondary, muted, and accent with their required foreground relationships.
  • Consequential actions: destructive treatment and readable content.
  • Structure and controls: border, input, and ring.
  • Data visualization: chart roles used by the project's real charts.
  • Navigation shells: sidebar surface, foreground, actions, accents, borders, and focus treatment.
  • Shape and type: radius and the project's typography mappings.
  • Modes: an explicit light and dark value, or a documented decision that a role is outside the accepted scope.

Token specimen · real values

Ambient Sage

Live render

Ambient Sage's actual tokens — the same values its exports use.

Color tokensSemantic roles with HEX / HSL / CMYK

Color tokens

Ambient Sage
light · HEX · HSL · CMYK

Core

#F3F4EF

background

H 72 · C0, 0, 2, 4

#1A1C17

foreground

H 84 · C7, 0, 18, 89

#E5E6E0

card

H 70 · C0, 0, 3, 10

#ECEEE8

muted

H 80 · C1, 0, 3, 7

#D8D9D2

border

H 68.57 · C0, 0, 3, 15

Brand

#FEE951

primary

H 52.72 · C0, 8, 68, 0

#1A1C17

primary-fg

H 84 · C7, 0, 18, 89

#E5E6E0

secondary

H 70 · C0, 0, 3, 10

#F7E464

accent

H 52.24 · C0, 8, 60, 3

#FEE951

ring

H 52.72 · C0, 8, 68, 0

Semantic

#C0392B

destructive

H 5.64 · C0, 70, 78, 25

#FFFFFF

destructive-fg

H 0 · C0, 0, 0, 0

#2D7238

success

H 129.57 · C61, 0, 51, 55

#C97D12

warning

H 35.08 · C0, 38, 91, 21

#545651

muted-fg

H 84 · C2, 0, 6, 66

Charts

#FEE951

chart-1

H 52.72 · C0, 8, 68, 0

#4A8FD4

chart-2

H 210 · C65, 33, 0, 17

#6BBF8A

chart-3

H 142.14 · C44, 0, 28, 25

#E07498

chart-4

H 340 · C0, 48, 32, 12

#E8A24B

chart-5

H 33.25 · C0, 30, 68, 9

Type scaleHeading, body, and mono in the kit's fonts

Typography

Ambient Sage

Scale: compact-product

Density: balanced

Heading · Plus Jakarta Sans · 1.875rem

Ship beautiful product faster

Subheading · Plus Jakarta Sans · 1.375rem

A warm-sage neutral-surface mobile kit with a single vivid yellow accent, flat tonal cards, and oversized display numerals.

Body · Plus Jakarta Sans · 1rem

Ambient Sage uses a near-white warm-sage canvas (#f3f4ef) with card panels distinguished only by a tonal shift to #e5e6e0, never by shadows or borders. A single vivid yellow (#fee951) is the only saturated color and appears sparingly at component scale as orbs, button fills, and focus rings. Primary data values render as oversized bold hero numerals with a small superscript unit. Typography is a friendly rounded geometric (Plus Jakarta Sans) with no uppercase and no tight tracking, while JetBrains Mono is reserved for hex codes and technical strings. Generous rounding and luminance-only contrast give the whole system a calm, minimal feel.

Mono · JetBrains Mono · 0.8125rem

npx shadcn add ambientsage.json

Aa

Plus Jakarta Sans · Heading

400500600700

Aa

Plus Jakarta Sans · Body

400500600700

ABCDEFGHIJKLM NOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz

0123456789 & @ # % →

Radius & spacingCorner radius, elevation, and spacing steps

Tokens

Ambient Sage primitives
density: balanced

Radius scale

sm · 0.375rem
md · 0.75rem
lg · 1.25rem
xl · 1.75rem

Component radius

button
card
input

Elevation

level 1
level 2
level 3
level 4

Spacing · base 4px

1x
2x
3x
4x
6x
8x
A complete upstream kit exposes more than palette values. Its semantic roles, type choices, and spacing guidance still need project mapping and verification.

Copy the source-to-target crosswalk

Use one row per governing decision, rather than one row per hex value. Keep the source wording, semantic interpretation, mode inputs, destination artifact, conflicts, owner, and consumer check. Uncertainty then becomes visible before implementation begins.

source_version,source_decision,semantic_role,light_input,dark_input,shadcn_destination,non_token_destination,conflict,status,owner,verification_case
"Brand guide 4.2","Primary action uses approved brand yellow","primary / primary-foreground","approved value","unresolved","theme variables","button contract","Dark foreground pair missing","blocked","Brand owner","Primary button in light and dark"
"Brand guide 4.2","Technical strings use mono","technical text","n/a","n/a","font mapping if supported","DESIGN.md + code component contract","None","mapped","Design-system owner","Code sample and identifier cell"
"Brand guide 4.2","Avoid decorative shadows","elevation policy","n/a","n/a","none","DESIGN.md + component contracts","Existing card shadow conflicts","revise","Component owner","Card and popover"
"Brand guide 4.2","Charts use approved sequence","chart roles","roles supplied","roles supplied","chart-1 through chart-5","chart usage guidance","Series-to-role policy missing","unresolved","Data-viz owner","Five-series chart in both modes"
Copyable crosswalk. Replace these illustrative values and owners with evidence from your project.

A blocked row is useful. It explains why the conversion can't proceed without turning an assumption into a shared decision. Keep blocked and unresolved rows beside completed mappings so they don't disappear during export.

Map color relationships in both modes

Start with relationships that recur across components. Background and foreground define the base reading surface. Card and popover define contained layers. Primary and secondary express action hierarchy. Muted and accent support lower-emphasis content, selection, or emphasis according to the approved system. Border, input, and ring handle structure and interaction.

  1. 1

    Name the intended role

    Describe what the color does in the interface. Avoid labels such as green or brand yellow when the decision is really success, primary action, muted text, or focus.

  2. 2

    Record the light pair

    Map the surface and intended foreground together. Check them in the consumers that will use them rather than approving either value alone.

  3. 3

    Record the dark pair separately

    Don't derive dark mode by mechanically inverting the palette unless the approved source authorizes that transformation.

  4. 4

    Add structural and interaction roles

    Map borders, inputs, and focus rings deliberately. A page can look branded while forms and keyboard focus retain unrelated defaults.

  5. 5

    Map charts and sidebars only with policy

    Chart colors don't decide series order, overlap, or status meaning. Sidebar colors don't define navigation states. Route those rules to their owners.

Consistency check · No dark-mode parity

The same plan card, built two ways in Ambient Sage.

Drifting system

Pricing

Starter$19/mo

Everything a small team needs to ship a branded UI.

Consistent system

Pricing

Starter$19/mo

Everything a small team needs to ship a branded UI.

What to notice: Paired semantic roles make mode differences explicit. This comparison doesn't certify a consuming project's dark-mode implementation.

Review relationships, not isolated swatches

For every surface token, ask which foreground appears on it and which states can surround it. This exposes missing pairs earlier than a palette review.

Route non-color decisions to the layer that can enforce them

Brand guidelines rarely stop at color. They may define typography, density, rounding, layout rhythm, imagery, motifs, shadows, and prohibitions. Forcing everything into theme variables either loses the rule or creates variables that no component reliably consumes.

Use it forExample
Shadcn theme variablesReusable values with an established theme consumerSemantic colors and shared radius
DESIGN.mdIntent, hierarchy, composition, usage conditions, and prohibitionsReserve mono for technical strings; avoid decorative shadows
Component contractStructure, variants, and component-owned statesButton loading treatment or input error anatomy
Application policyProduct meaning, permissions, workflow, and data behaviorWhich action is destructive and when confirmation is required
Unresolved queueMissing, conflicting, or unauthorized decisionsNo approved dark value for the focus ring
Decision-routing matrix

Typography often spans several destinations. The approved family and role belong in the source record. Reusable family mappings may enter the theme or Tailwind layer, while weight, size, tracking, and hierarchy guidance can belong in DESIGN.md. A data table may need a component rule for numeric treatment. Font delivery remains an implementation concern.

Spacing follows the same rule. A shared scale can be reusable, while page gutters, dense table rows, responsive transitions, and section pacing may belong in layout or component contracts. Keep shadows and motifs in guidance or components when their correct use depends on context.

Inspect a complete kit before building the crosswalk

Ambient Sage exposes semantic light and dark roles, typography, spacing guidance, DESIGN.md, and shadcn delivery as one bounded upstream example. Inspect the artifact set, then create a project-specific mapping and acceptance record.

Set precedence before artifacts disagree

The approved guideline may disagree with an old theme, a component default, a screenshot, or a local override. Set the precedence before editing so the nearest piece of code doesn't win by convenience.

  1. The current approved source contract governs the brand decision within its stated scope.
  2. A documented, approved exception may override that decision only for its named consumer, condition, and review period.
  3. The mapped shadcn theme and DESIGN.md implement the source; they do not outrank it.
  4. Component defaults apply where the source and component contract permit them.
  5. Local overrides are evidence of project behavior, not automatic authority.
  6. If approved sources conflict and no precedence exists, block the affected mapping and assign an owner.

Existing doesn't mean approved

A value can be old, widely used, and technically valid while still conflicting with current authority. Record its reach before changing it, but don't promote it to the source of truth simply because replacement is inconvenient.

Use Ambient Sage as bounded upstream intake

Ambient Sage v1 is a public example of the inputs a conversion can start from. Its page lists 28 semantic tokens across light and dark modes, Plus Jakarta Sans for body and heading roles, JetBrains Mono for technical strings, a compact product-oriented type scale, spacing and visual guidance, DESIGN.md, and shadcn delivery. Those facts establish the available upstream kit.

Kit showcase · live surfaces

Ambient Sage

Live render

Ambient Sage rendered from its real tokens across 3 surfaces.

Landing pageFull marketing page — hero, social proof, features, a metrics/graph section, and CTA — as alternating full-bleed bands in the kit's captured surfaces. Scroll to explore.
AS
Ambient Sage
Sign in
Private beta
A calmer way to plan the week

Join the first group testing a focused workspace for small teams.

ambientsage.com/overview

Active users

15.1k

+5%

MRR

$49.1k

+3%

Retention

89%

+2%

Trusted by teams atNorthwindLumenCedarVertexHalcyon

Why join early

Everything you need to ship

One focused workspace

Clear defaults keep every screen consistent from first draft to launch.

Built with early teams

Accessible components and visible states are built into the system.

A clear weekly rhythm

Reusable patterns give product, marketing, and content one visual language.

By the numbers

Growth you can measure
Live

Monthly recurring revenue

$49.1k+3%

Targets

Active users15.1k
MRR$49.1k
Retention89%
All targets on track this quarter

Activity

Last 12 months of usage

Retention 89%NPS 69
JFMAMJJASOND
Join Ambient Sage's private beta

Join the first group testing a focused workspace for small teams.

AS
Ambient Sage

ambientsage.com

Product

  • Features
  • Pricing
  • Changelog

Company

  • About
  • Careers
  • Contact

Resources

  • Docs
  • Guides
  • Status

© 2026 Ambient Sage. All rights reserved.

App dashboardProduct UI: sidebar, KPI cards, area chart, recent sales, and a transactions table.
Ambient SageOverview
Search anything⌘K
AS

Analytics

Revenue overview

See revenue and retention trends alongside account health.

Jan 1 to Jan 30, 2026
Overview
Analytics
Reports
Notifications

Active users

15.1k

2,491 new

+5%

MRR

$49.1k

Net of churn

+3%

Retention

89%

28-day window

+2%

NPS

69

1,204 replies

+3

Revenue

Last 12 months

$49.1k +18.2%

12m30d7d
JanFebMarAprMayJunJulAugSepOctNovDec

Acquisition

Goal completion

On track
78%of goal
Organic48%
Direct31%
Referral21%

Recent transactions

Latest activity across your workspace

View all
CustomerStatusDateAmount
AR

Alex Rivera

Founder & CEO

Paid2 min ago$1,999.00
MO

Mira Okonkwo

Head of Product

Pending1 hour ago$39.00
JF

Jonas Feld

Design Lead

Processing3 hours ago$299.00
Component sheetButtons, inputs, badges, controls — all shadcn, all themed.
Ambient Sage UI

Every shadcn component, themed by this kit.

Buttons

Badges

Default
Secondary
Outline
SuccessWarning

Avatar / chips

AS
minimalwarm-neutralflat

Form

Controls

Feedback

Onboarding72%

Ship beautiful product faster

A warm-sage neutral-surface mobile kit with a single vivid yellow accent, flat tonal cards, and oversized display numerals.

Tabs

AccountTeamBilling

Manage your account settings and preferences.

Alert

Heads up

Your trial ends in 7 days. Upgrade to keep access.

Tooltip

Add to library
The same source system appears across several surfaces. Treat the showcase as upstream kit evidence, not acceptance evidence for your application.

For a real conversion, several fields remain open until someone inspects the consuming repository: installed artifact version, CSS destination, theme selector, font delivery, component variants, local overrides, rendered light mode, rendered dark mode, keyboard focus, charts, and accessibility findings. Mark them unexecuted, not passed.

Apply the artifacts without losing identity

Keep the source record, mapped output, and project mapping identifiable after installation. Record the source version, exported artifact identity, destination files, application route, and transformations. A later reviewer should be able to tell whether the project is current without reverse-engineering its CSS.

  1. 1

    Approve the crosswalk

    Review mappings and unresolved rows before changing the project. A valid export can still encode an unauthorized decision.

  2. 2

    Apply the theme through the project's supported route

    Use the route appropriate to the current project and shadcn setup. Record what was added, changed, or generated. Consult the official shadcn documentation for current mechanics.

  3. 3

    Place DESIGN.md where the intended agent can read it

    State which file is authoritative for design guidance and how it relates to tokens and component contracts.

  4. 4

    Record component and application mappings

    Identify wrappers, aliases, theme selectors, chart configuration, font loading, and other project-specific connections.

  5. 5

    List local exceptions

    Give every deliberate override a consumer, rationale, owner, and review condition. An unexplained override remains a mismatch.

Verify representative consumers in both modes

Installation proves that the artifacts were delivered. It doesn't prove that components resolve them, that local styles leave them visible, or that users receive the intended result. Write the expected behavior before observing the interface, then record what actually happened.

consumer,condition,expected_source,expected_behavior,observed,disposition,owner
"Primary navigation","light and dark","background, foreground, accent, ring","Current item and keyboard focus remain distinguishable","UNEXECUTED","open","UI owner"
"Sign-up form","default, focus, error, disabled","input, border, ring plus input contract","Boundaries and states remain distinguishable","UNEXECUTED","open","Forms owner"
"Delete dialog","light and dark","destructive roles plus application policy","Action is clear and confirmation follows policy","UNEXECUTED","open","Workflow owner"
"Five-series chart","light and dark","chart roles plus chart policy","Series remain distinguishable under recorded content","UNEXECUTED","open","Data-viz owner"
"Settings table","desktop and narrow viewport","type roles, spacing, border","Labels, values, and technical strings use their assigned roles","UNEXECUTED","open","Settings owner"
Expectation-first acceptance record. Fill the observed column only after running each named case.

Component specimen · Input

Ambient Sage

Live render

The input primitive in Ambient Sage, across 4 states.

Default

Focus

Disabled

Error

Enter a valid email address.

An input exposes several mappings at once: surface, foreground, border, focus, disabled, and error treatment. This specimen shows the kit contract, not a tested project result.

Use a small but representative case set

  • Navigation: default, current, hover, and keyboard-focus states.
  • Form: label, placeholder, entered text, focus, validation error, and disabled control.
  • Consequential action: trigger, confirmation surface, destructive action, cancellation, and resulting message.
  • Chart: the maximum representative series count, labels, grid or axes, tooltip, and both modes.
  • Sidebar: base surface, selected item, accent treatment, separator, and focus.
  • Typography: heading, body, label, technical string, numeric data, and a narrow layout.
  • Mode transition: base page, elevated surface, overlay, form, chart, and navigation shell after switching themes.

Accessibility remains a downstream evaluation

A complete token set and polished specimen don't certify accessibility. Evaluate the implemented components with their real content, states, surroundings, interaction paths, and supported environments.

Route failures to the first divergent layer

When a component looks wrong, resist patching the visible element first. Trace the decision from its authority to the rendered result, then stop at the earliest layer where expected and observed evidence disagree.

  1. 1

    Source ambiguity

    The approved guide doesn't define the role, mode, state, or precedence. Return the decision to the authorized brand owner.

  2. 2

    Transformation failure

    The mapped or generated artifact doesn't preserve the approved decision. Correct the mapping or generation step and regenerate affected output.

  3. 3

    Project mapping failure

    The project points to a stale file, wrong selector, wrong alias, missing font, or unintended theme source. Correct the project connection.

  4. 4

    Component-contract failure

    The component lacks the required variant or state, or owns an independent decision the shared theme cannot express. Fix or clarify the component contract.

  5. 5

    Local override

    A page, wrapper, utility, or inline value masks the shared mapping. Remove it only if unauthorized, or record it as a bounded approved exception.

  6. 6

    Rendered-observation failure

    The intended artifacts and mappings are present, but the named condition still fails. Investigate the actual browser, content, interaction, mode, and environment.

This order protects shared decisions from symptom fixes. Changing primary because one button has a local override could repaint unrelated actions and leave the original override in place. Finding the first divergence sends the correction to the owner who can fix it at the right scope.

Choose accept, revise, or block

Use whenNext action
AcceptRequired source decisions, mappings, artifacts, consumers, modes, and observations satisfy the stated scopeRecord accepted versions and the evidence date
ReviseThe source is clear and the correction is bounded to mapping, implementation, documentation, or an owned exceptionAssign the failed layer and rerun affected cases
BlockA required decision is missing, approved sources conflict, ownership is absent, or required evidence cannot be collectedName the missing decision or evidence and stop affected adoption
Make the conversion decision against the recorded scope.

Don't approve the whole theme because one page looks right. Complete one important row from approved source to rendered consumer, including both modes and the states that matter. If it passes, apply the method to the next shared role. If it fails, revise the first divergent layer before adding more mappings.

Sources