back to gallery

Boule

A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.

Download DESIGN.md

Portable DESIGN.md — tokens plus the paired art style. Agents must generate real images.

the spec

specification

philosophy
summary
Boule is a hard-candy formulation console that reads a boiled sweet by its cut: every module is a cross-section of concentric jewel strata pressed into a glossy lacquer shell, set on liquorice-dark glass so the sugar is the only thing that glows. It is conceived from the same idea as its parent — an interface treated like a thin candy shell over translucent layers — but takes the opposite path: hard, dark and jewelled rather than soft, pale and milky.
values
The cut is the readout: a pour is data you read by slicing the candy, layer by concentric layer.Three boiled-sweet jewels do the work of a whole palette, used like highlighters and always paired with a label.One even lacquer sheen per surface is the only shine; an even band means a sealed shell.Dark is functional: jewel sugars read true on near-black glass, the way they look pulled fresh from the mould.
anti-values
×No pale or white ground, no pastel washes, no milky frost — Boule is jewelled and dark, not a frosted dragée.×No gloss-band-on-rectangle panels borrowed from a soft-glass console; the cross-section dial is the organizing form.×No rainbow refraction, neon glow, or more than three accents competing with the strata.×No hard grey borders, accent edges, boxed pill nav, or nested cards.
visual character
A cross-section dial of concentric jewel strata — teal base, amber middle, cherry core — each ring darkened to show its fill.Candy slabs on a deep liquorice ground, each carrying one convex lacquer sheen at the top-left.Progress and composition rendered as stacked candy strata-bars in the jewel accents, never flat neutral fills.Heavy grotesk display (Hanken Grotesk), Space Mono readouts, rounded continuous geometry.
tokens
colors16 items
bg
#16120F
surface
#211B17
surface_2
#2B231E
text
#F4EDE3
muted
#A99A88
border
#3A3029
accent
#F0476A
accent_2
#F2A93B
accent_3
#3FC7C2
on_accent
#1A0E12
success
#6FCF97
warning
#F2A93B
error
#F0476A
info
#3FC7C2
primary
#F0476A
secondary
#2B231E
typography10 items
base size
17px
body font
Inter Tight
heading font
Hanken Grotesk
mono font
Space Mono
heading weight
800
heading transform
none
letter spacing
-0.03em
line height
1.55
scale ratio
1.25
google fonts url
https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@500;600;700;800&family=Inter+Tight:wght@400;500;600&family=Space+Mono:wght@400;700&display=swap
radii6 items
none
0
sm
16px
md
24px
lg
24px
xl
24px
full
9999px
shadows3 items
sm
0 1px 2px rgba(0,0,0,.4), 0 8px 18px rgba(0,0,0,.25)
md
0 24px 56px rgba(0,0,0,.4), inset 0 0 0 1px #3A3029
lg
0 40px 90px rgba(0,0,0,.5), inset 0 0 0 1px #3A3029
spacing2 items
base
8px
scale
4, 8, 12, 16, 24, 32, 48, 64, 88, 112
surfaces3 items
treatment
Candy slabs (#211B17 / recess #2B231E) on a deep liquorice #16120F ground; each surface carries one convex lacquer sheen at the top-left via radial-gradient(120% 70% at 30% -18%, rgba(255,255,255,.16), transparent 60%).
card style
24px rounded candy slab, low cool shadow, hairline toffee rim (inset, not a hard border), one lacquer sheen; no accent edges, no nested cards.
bg pattern
Quiet teal and cherry radial blooms at ~8% opacity in opposite corners over the liquorice ground; the candy is the only thing that glows.
borders4 items
default width
1px
accent width
2px
style
Hairline toffee rims via inset box-shadow rgba(58,48,41,1); focus rings inset 2px teal #3FC7C2; never a hard grey border.
character
Rims behave like the edge of a lacquer shell: near-invisible on neutral surfaces, a bright teal ring on focus.
motion3 items
duration
180ms
easing
cubic-bezier(.2,.8,.2,1)
philosophy
Humidity-soft: the lacquer sheen and section reveals fade only; the settled state is the default and renders with no JS; respects prefers-reduced-motion.
rules
composition
A cross-section dial of concentric jewel strata is the primary instrument; candy slabs carry supporting readouts, and strata-bars break the rhythm. Layouts are orbital (embodiment), hero-overlay (landing), and sidebar-grid (dashboard) — never an equal-card grid.
hierarchy
Hierarchy is made by jewel role and fill before quantity of colour: cherry is the one emphasis, amber the middle, teal the base; surfaces step liquorice -> slab -> recess; the lacquer sheen marks a sealed shell.
density

Airy low-to-medium density; tight 4-12px control clusters and 24-112px gaps between major groups for clean bench air.

signature
Cross-section dial of concentric jewel strata with fill arcs; one convex lacquer meniscus per surface; candy strata-bars for progress/composition; a three-ring boule seal mark. Surface roles: .slab, .recess (surface-2), and the dial .ring/.arc/.core.
layout
grid
Contained content caps at 1180px and centres. Embodiment uses an orbital console (dial + legend, then strata bars, readouts, controls, log, notices); dashboard uses a 248px sidebar + fluid main with KPI / dial-strata / log grids.
whitespace

72-120px outer section spacing, 24-48px between panels, 4-12px between labels and values.

density

Low-to-medium density for a confectioner's bench workflow.

responsive
Stacks to one column on mobile; the full-bleed hero spans 100vw and 100svh; grid children use minmax(0,1fr) + min-width:0 so nothing overflows; sidebar collapses to a top strip on mobile.
breakpoints
mobile
<= 640px
tablet
641px-980px
desktop
>= 981px
guidance
do
  • Make the cross-section dial the hero instrument; read layers by jewel colour and fill arc.
  • Keep the ground deep liquorice; reserve cherry for the one emphasis, amber and teal for the other strata.
  • Give every surface one even lacquer sheen; separate by space, the recess surface, and soft shadow.
  • Render progress and composition as candy strata-bars in the jewel accents.
  • Set batch ids, grams, percentages, and times in Space Mono; pair every accent with a label.
avoid
  • Do not default to a pale or white ground, or wash surfaces in pastel.
  • Do not flatten the strata into one bar or one colour, or use more than three jewel accents.
  • Do not add a second shine, a hard grey border, an accent edge, or a boxed nav widget.
  • Do not nest cards or rely on colour alone for state.
  • Do not borrow the soft-glass gloss-band-on-rectangle motif; the cross-section is the form.
imagery
pairs with

glace-atelier

summary
Subjects sealed in the Glace Atelier candy glaze, then sliced to a cross-section: a glossy boiled-sweet form revealing concentric jewel strata (teal base, amber middle, cherry core), one clean gloss band, an aqua condensation rim, lit dramatically on a deep liquorice near-black ground so the sugar is the only thing that glows.
subjects
sliced boiled-sweet and hard-candy cross-sectionsglossy domed confections on dark glasslayered sugar-glass still-life studiessingle rounded candy forms under hot studio light
usage
One full-bleed candy-glaze hero per landing with dark negative space on one side for a legible overlay; feature crops use the same technique. Keep the ground liquorice-dark, the jewels saturated, and the gloss band singular. Avoid pale grounds, rainbow refraction, and neon glow.
katagami spec
# Boule

## Philosophy

Boule is a hard-candy formulation console that reads a boiled sweet by its cut: every module is a cross-section of concentric jewel strata pressed into a glossy lacquer shell, set on liquorice-dark glass so the sugar is the only thing that glows. It is conceived from the same idea as its parent — an interface treated like a thin candy shell over translucent layers — but takes the opposite path: hard, dark and jewelled rather than soft, pale and milky.

### Values

- The cut is the readout: a pour is data you read by slicing the candy, layer by concentric layer.
- Three boiled-sweet jewels do the work of a whole palette, used like highlighters and always paired with a label.
- One even lacquer sheen per surface is the only shine; an even band means a sealed shell.
- Dark is functional: jewel sugars read true on near-black glass, the way they look pulled fresh from the mould.

### Anti-Values

- No pale or white ground, no pastel washes, no milky frost — Boule is jewelled and dark, not a frosted dragée.
- No gloss-band-on-rectangle panels borrowed from a soft-glass console; the cross-section dial is the organizing form.
- No rainbow refraction, neon glow, or more than three accents competing with the strata.
- No hard grey borders, accent edges, boxed pill nav, or nested cards.

### Visual Character

- A cross-section dial of concentric jewel strata — teal base, amber middle, cherry core — each ring darkened to show its fill.
- Candy slabs on a deep liquorice ground, each carrying one convex lacquer sheen at the top-left.
- Progress and composition rendered as stacked candy strata-bars in the jewel accents, never flat neutral fills.
- Heavy grotesk display (Hanken Grotesk), Space Mono readouts, rounded continuous geometry.

## Tokens

### Colors

| Name | Value |
|------|-------|
| bg | `#16120F` |
| surface | `#211B17` |
| surface_2 | `#2B231E` |
| text | `#F4EDE3` |
| muted | `#A99A88` |
| border | `#3A3029` |
| accent | `#F0476A` |
| accent_2 | `#F2A93B` |
| accent_3 | `#3FC7C2` |
| on_accent | `#1A0E12` |
| success | `#6FCF97` |
| warning | `#F2A93B` |
| error | `#F0476A` |
| info | `#3FC7C2` |
| primary | `#F0476A` |
| secondary | `#2B231E` |

### Typography

- **Base Size**: 17px
- **Body Font**: Inter Tight
- **Heading Font**: Hanken Grotesk
- **Mono Font**: Space Mono
- **Heading Weight**: 800
- **Heading Transform**: none
- **Letter Spacing**: -0.03em
- **Line Height**: 1.55
- **Scale Ratio**: 1.25
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@500;600;700;800&family=Inter+Tight:wght@400;500;600&family=Space+Mono:wght@400;700&display=swap

### Radii

- **None**: 0
- **Sm**: 16px
- **Md**: 24px
- **Lg**: 24px
- **Xl**: 24px
- **Full**: 9999px

### Shadows

- **Sm**: 0 1px 2px rgba(0,0,0,.4), 0 8px 18px rgba(0,0,0,.25)
- **Md**: 0 24px 56px rgba(0,0,0,.4), inset 0 0 0 1px #3A3029
- **Lg**: 0 40px 90px rgba(0,0,0,.5), inset 0 0 0 1px #3A3029

### Spacing

- **Base**: 8px
- **Scale**: [4,8,12,16,24,32,48,64,88,112]

### Surfaces

- **Treatment**: Candy slabs (#211B17 / recess #2B231E) on a deep liquorice #16120F ground; each surface carries one convex lacquer sheen at the top-left via radial-gradient(120% 70% at 30% -18%, rgba(255,255,255,.16), transparent 60%).
- **Card Style**: 24px rounded candy slab, low cool shadow, hairline toffee rim (inset, not a hard border), one lacquer sheen; no accent edges, no nested cards.
- **Bg Pattern**: Quiet teal and cherry radial blooms at ~8% opacity in opposite corners over the liquorice ground; the candy is the only thing that glows.

### Borders

- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: Hairline toffee rims via inset box-shadow rgba(58,48,41,1); focus rings inset 2px teal #3FC7C2; never a hard grey border.
- **Character**: Rims behave like the edge of a lacquer shell: near-invisible on neutral surfaces, a bright teal ring on focus.

### Motion

- **Duration**: 180ms
- **Easing**: cubic-bezier(.2,.8,.2,1)
- **Philosophy**: Humidity-soft: the lacquer sheen and section reveals fade only; the settled state is the default and renders with no JS; respects prefers-reduced-motion.

## Rules

### Composition

A cross-section dial of concentric jewel strata is the primary instrument; candy slabs carry supporting readouts, and strata-bars break the rhythm. Layouts are orbital (embodiment), hero-overlay (landing), and sidebar-grid (dashboard) — never an equal-card grid.

### Hierarchy

Hierarchy is made by jewel role and fill before quantity of colour: cherry is the one emphasis, amber the middle, teal the base; surfaces step liquorice -> slab -> recess; the lacquer sheen marks a sealed shell.

### Density

Airy low-to-medium density; tight 4-12px control clusters and 24-112px gaps between major groups for clean bench air.

### Signature

Cross-section dial of concentric jewel strata with fill arcs; one convex lacquer meniscus per surface; candy strata-bars for progress/composition; a three-ring boule seal mark. Surface roles: .slab, .recess (surface-2), and the dial .ring/.arc/.core.

## Layout

### Grid

Contained content caps at 1180px and centres. Embodiment uses an orbital console (dial + legend, then strata bars, readouts, controls, log, notices); dashboard uses a 248px sidebar + fluid main with KPI / dial-strata / log grids.

### Whitespace

72-120px outer section spacing, 24-48px between panels, 4-12px between labels and values.

### Density

Low-to-medium density for a confectioner's bench workflow.

### Responsive

Stacks to one column on mobile; the full-bleed hero spans 100vw and 100svh; grid children use minmax(0,1fr) + min-width:0 so nothing overflows; sidebar collapses to a top strip on mobile.

### Breakpoints

- **Mobile**: <= 640px
- **Tablet**: 641px-980px
- **Desktop**: >= 981px

## Guidance

### Do

- Make the cross-section dial the hero instrument; read layers by jewel colour and fill arc.
- Keep the ground deep liquorice; reserve cherry for the one emphasis, amber and teal for the other strata.
- Give every surface one even lacquer sheen; separate by space, the recess surface, and soft shadow.
- Render progress and composition as candy strata-bars in the jewel accents.
- Set batch ids, grams, percentages, and times in Space Mono; pair every accent with a label.

### Don't

- Do not default to a pale or white ground, or wash surfaces in pastel.
- Do not flatten the strata into one bar or one colour, or use more than three jewel accents.
- Do not add a second shine, a hard grey border, an accent edge, or a boxed nav widget.
- Do not nest cards or rely on colour alone for state.
- Do not borrow the soft-glass gloss-band-on-rectangle motif; the cross-section is the form.

### Accessibility

Maintain WCAG AA contrast: cream #F4EDE3 on liquorice #16120F and on slabs; visible teal focus rings on every control; jewel state always paired with a text label; respect prefers-reduced-motion.

## Imagery Direction

### Pairs With

glace-atelier

### Summary

Subjects sealed in the Glace Atelier candy glaze, then sliced to a cross-section: a glossy boiled-sweet form revealing concentric jewel strata (teal base, amber middle, cherry core), one clean gloss band, an aqua condensation rim, lit dramatically on a deep liquorice near-black ground so the sugar is the only thing that glows.

### Subjects

- sliced boiled-sweet and hard-candy cross-sections
- glossy domed confections on dark glass
- layered sugar-glass still-life studies
- single rounded candy forms under hot studio light

### Usage

One full-bleed candy-glaze hero per landing with dark negative space on one side for a legible overlay; feature crops use the same technique. Keep the ground liquorice-dark, the jewels saturated, and the gloss band singular. Avoid pale grounds, rainbow refraction, and neon glow.
DESIGN.md
---
version: "alpha"
name: "Boule"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
  bg: "#16120F"
  surface: "#211B17"
  surface_2: "#2B231E"
  text: "#F4EDE3"
  muted: "#A99A88"
  border: "#3A3029"
  accent: "#F0476A"
  accent_2: "#F2A93B"
  accent_3: "#3FC7C2"
  on_accent: "#1A0E12"
  success: "#6FCF97"
  warning: "#F2A93B"
  error: "#F0476A"
  info: "#3FC7C2"
  primary: "#F0476A"
  secondary: "#2B231E"
typography:
  headline-lg:
    fontFamily: "Hanken Grotesk"
    fontSize: "2.075rem"
    fontWeight: 700
    lineHeight: 1.1
    letterSpacing: "-0.03em"
  headline-md:
    fontFamily: "Hanken Grotesk"
    fontSize: "1.66rem"
    fontWeight: 600
    lineHeight: 1.15
    letterSpacing: "-0.03em"
  body-md:
    fontFamily: "Inter Tight"
    fontSize: "17px"
    fontWeight: 400
    lineHeight: 1.55
    letterSpacing: "-0.03em"
  label-md:
    fontFamily: "Space Mono"
    fontSize: "0.75rem"
    fontWeight: 600
    lineHeight: 1
    letterSpacing: "0.08em"
rounded:
  none: "0px"
  sm: "16px"
  md: "24px"
  lg: "24px"
  xl: "24px"
  full: "9999px"
spacing:
  base: "8px"
  xs: "4px"
  sm: "8px"
  md: "12px"
  lg: "16px"
  xl: "24px"
  2xl: "32px"
  3xl: "48px"
  4xl: "64px"
  step-8: "88px"
  step-9: "112px"
components:
  color-reference-bg:
    backgroundColor: "{colors.bg}"
  color-reference-surface:
    backgroundColor: "{colors.surface}"
  color-reference-surface_2:
    backgroundColor: "{colors.surface_2}"
  color-reference-text:
    backgroundColor: "{colors.text}"
  color-reference-muted:
    backgroundColor: "{colors.muted}"
  color-reference-border:
    backgroundColor: "{colors.border}"
  color-reference-accent:
    backgroundColor: "{colors.accent}"
  color-reference-accent_2:
    backgroundColor: "{colors.accent_2}"
  color-reference-accent_3:
    backgroundColor: "{colors.accent_3}"
  color-reference-on_accent:
    backgroundColor: "{colors.on_accent}"
  color-reference-success:
    backgroundColor: "{colors.success}"
  color-reference-warning:
    backgroundColor: "{colors.warning}"
  color-reference-error:
    backgroundColor: "{colors.error}"
  color-reference-info:
    backgroundColor: "{colors.info}"
  color-reference-primary:
    backgroundColor: "{colors.primary}"
  color-reference-secondary:
    backgroundColor: "{colors.secondary}"
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "#000000"
    typography: "{typography.label-md}"
    rounded: "{rounded.md}"
    padding: "{spacing.md}"
  card-surface:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.text}"
    rounded: "{rounded.md}"
    padding: "{spacing.md}"
  input-default:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.text}"
    rounded: "{rounded.md}"
    height: "44px"
---

# Boule

## Overview

Boule is a hard-candy formulation console that reads a boiled sweet by its cut: every module is a cross-section of concentric jewel strata pressed into a glossy lacquer shell, set on liquorice-dark glass so the sugar is the only thing that glows. It is conceived from the same idea as its parent — an interface treated like a thin candy shell over translucent layers — but takes the opposite path: hard, dark and jewelled rather than soft, pale and milky.

### Values

- The cut is the readout: a pour is data you read by slicing the candy, layer by concentric layer.
- Three boiled-sweet jewels do the work of a whole palette, used like highlighters and always paired with a label.
- One even lacquer sheen per surface is the only shine; an even band means a sealed shell.
- Dark is functional: jewel sugars read true on near-black glass, the way they look pulled fresh from the mould.

### Anti-Values

- No pale or white ground, no pastel washes, no milky frost — Boule is jewelled and dark, not a frosted dragée.
- No gloss-band-on-rectangle panels borrowed from a soft-glass console; the cross-section dial is the organizing form.
- No rainbow refraction, neon glow, or more than three accents competing with the strata.
- No hard grey borders, accent edges, boxed pill nav, or nested cards.

### Visual Character

- A cross-section dial of concentric jewel strata — teal base, amber middle, cherry core — each ring darkened to show its fill.
- Candy slabs on a deep liquorice ground, each carrying one convex lacquer sheen at the top-left.
- Progress and composition rendered as stacked candy strata-bars in the jewel accents, never flat neutral fills.
- Heavy grotesk display (Hanken Grotesk), Space Mono readouts, rounded continuous geometry.

## Colors

Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.

| Token | Value |
|-------|-------|
| bg | `#16120F` |
| surface | `#211B17` |
| surface_2 | `#2B231E` |
| text | `#F4EDE3` |
| muted | `#A99A88` |
| border | `#3A3029` |
| accent | `#F0476A` |
| accent_2 | `#F2A93B` |
| accent_3 | `#3FC7C2` |
| on_accent | `#1A0E12` |
| success | `#6FCF97` |
| warning | `#F2A93B` |
| error | `#F0476A` |
| info | `#3FC7C2` |
| primary | `#F0476A` |
| secondary | `#2B231E` |

## Typography

- **Headline-Lg**: Hanken Grotesk, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Hanken Grotesk, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Inter Tight, 17px, weight 400, line-height 1.55.
- **Label-Md**: Space Mono, 0.75rem, weight 600, line-height 1.

## Layout

### Spacing Tokens

- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `64px`
- **Step-8**: `88px`
- **Step-9**: `112px`

### Grid

Contained content caps at 1180px and centres. Embodiment uses an orbital console (dial + legend, then strata bars, readouts, controls, log, notices); dashboard uses a 248px sidebar + fluid main with KPI / dial-strata / log grids.

### Whitespace

72-120px outer section spacing, 24-48px between panels, 4-12px between labels and values.

### Density

Low-to-medium density for a confectioner's bench workflow.

### Responsive

Stacks to one column on mobile; the full-bleed hero spans 100vw and 100svh; grid children use minmax(0,1fr) + min-width:0 so nothing overflows; sidebar collapses to a top strip on mobile.

### Breakpoints

- **Mobile**: <= 640px
- **Tablet**: 641px-980px
- **Desktop**: >= 981px

## Elevation & Depth

### Shadows

- **Sm**: 0 1px 2px rgba(0,0,0,.4), 0 8px 18px rgba(0,0,0,.25)
- **Md**: 0 24px 56px rgba(0,0,0,.4), inset 0 0 0 1px #3A3029
- **Lg**: 0 40px 90px rgba(0,0,0,.5), inset 0 0 0 1px #3A3029

## Shapes

### Rounded

- **None**: `0px`
- **Sm**: `16px`
- **Md**: `24px`
- **Lg**: `24px`
- **Xl**: `24px`
- **Full**: `9999px`

### Surfaces

- **Treatment**: Candy slabs (#211B17 / recess #2B231E) on a deep liquorice #16120F ground; each surface carries one convex lacquer sheen at the top-left via radial-gradient(120% 70% at 30% -18%, rgba(255,255,255,.16), transparent 60%).
- **Card Style**: 24px rounded candy slab, low cool shadow, hairline toffee rim (inset, not a hard border), one lacquer sheen; no accent edges, no nested cards.
- **Bg Pattern**: Quiet teal and cherry radial blooms at ~8% opacity in opposite corners over the liquorice ground; the candy is the only thing that glows.

### Borders

- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: Hairline toffee rims via inset box-shadow rgba(58,48,41,1); focus rings inset 2px teal #3FC7C2; never a hard grey border.
- **Character**: Rims behave like the edge of a lacquer shell: near-invisible on neutral surfaces, a bright teal ring on focus.

## Components

### Composition

A cross-section dial of concentric jewel strata is the primary instrument; candy slabs carry supporting readouts, and strata-bars break the rhythm. Layouts are orbital (embodiment), hero-overlay (landing), and sidebar-grid (dashboard) — never an equal-card grid.

### Hierarchy

Hierarchy is made by jewel role and fill before quantity of colour: cherry is the one emphasis, amber the middle, teal the base; surfaces step liquorice -> slab -> recess; the lacquer sheen marks a sealed shell.

### Density

Airy low-to-medium density; tight 4-12px control clusters and 24-112px gaps between major groups for clean bench air.

### Signature

Cross-section dial of concentric jewel strata with fill arcs; one convex lacquer meniscus per surface; candy strata-bars for progress/composition; a three-ring boule seal mark. Surface roles: .slab, .recess (surface-2), and the dial .ring/.arc/.core.

## shadcn/ui Usage

When the target app uses shadcn/ui, copy DESIGN.md with shadcn instead of the plain DESIGN.md. It contains the same Katagami design-language source plus the shadcn/ui primitives, imports, theme variables, component recipes, and preview-shot guidance.

DESIGN.md with shadcn: `/language/en-019ef9ed-10eb-7901-bd3e-d5c1df9f83ea/DESIGN.with-shadcn.md`.

The shadcn page also exposes optional machine-readable files for automation, but the human-facing handoff is DESIGN.md with shadcn.

Install recommended primitives with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.

Use these primitives in shadcn apps:
- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table

Implementation rule for agents: import shadcn primitives from `@/components/ui/*`, apply the generated CSS variables first, then compose the language-specific recipes from the companion MD. Katagami remains the source of truth; shadcn names are the implementation surface.

## Do's and Don'ts

- Do Make the cross-section dial the hero instrument; read layers by jewel colour and fill arc.
- Do Keep the ground deep liquorice; reserve cherry for the one emphasis, amber and teal for the other strata.
- Do Give every surface one even lacquer sheen; separate by space, the recess surface, and soft shadow.
- Do Render progress and composition as candy strata-bars in the jewel accents.
- Do Set batch ids, grams, percentages, and times in Space Mono; pair every accent with a label.
- Don't Do not default to a pale or white ground, or wash surfaces in pastel.
- Don't Do not flatten the strata into one bar or one colour, or use more than three jewel accents.
- Don't Do not add a second shine, a hard grey border, an accent edge, or a boxed nav widget.
- Don't Do not nest cards or rely on colour alone for state.
- Don't Do not borrow the soft-glass gloss-band-on-rectangle motif; the cross-section is the form.

### Accessibility

Maintain WCAG AA contrast: cream #F4EDE3 on liquorice #16120F and on slabs; visible teal focus rings on every control; jewel state always paired with a text label; respect prefers-reduced-motion.

## Imagery Direction

### Pairs With

glace-atelier

### Summary

Subjects sealed in the Glace Atelier candy glaze, then sliced to a cross-section: a glossy boiled-sweet form revealing concentric jewel strata (teal base, amber middle, cherry core), one clean gloss band, an aqua condensation rim, lit dramatically on a deep liquorice near-black ground so the sugar is the only thing that glows.

### Subjects

- sliced boiled-sweet and hard-candy cross-sections
- glossy domed confections on dark glass
- layered sugar-glass still-life studies
- single rounded candy forms under hot studio light

### Usage

One full-bleed candy-glaze hero per landing with dark negative space on one side for a legible overlay; feature crops use the same technique. Keep the ground liquorice-dark, the jewels saturated, and the gloss band singular. Avoid pale grounds, rainbow refraction, and neon glow.
shadcn/ui theme
```json
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "boule",
  "type": "registry:theme",
  "title": "Boule shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#16120F",
      "foreground": "#F4EDE3",
      "card": "#211B17",
      "card-foreground": "#F4EDE3",
      "popover": "#211B17",
      "popover-foreground": "#F4EDE3",
      "primary": "#F0476A",
      "primary-foreground": "#ffffff",
      "secondary": "#2B231E",
      "secondary-foreground": "#ffffff",
      "muted": "#A99A88",
      "muted-foreground": "#F4EDE3",
      "accent": "#F0476A",
      "accent-foreground": "#ffffff",
      "destructive": "#F0476A",
      "border": "#3A3029",
      "input": "#3A3029",
      "ring": "#F0476A",
      "chart-1": "#F0476A",
      "chart-2": "#2B231E",
      "chart-3": "#F0476A",
      "chart-4": "#6FCF97",
      "chart-5": "#F2A93B",
      "sidebar": "#211B17",
      "sidebar-foreground": "#F4EDE3",
      "sidebar-primary": "#F0476A",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#3FC7C2",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#3A3029",
      "sidebar-ring": "#F0476A",
      "radius": "24px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#F0476A",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#F0476A",
      "accent-foreground": "#ffffff",
      "destructive": "#F0476A",
      "border": "#303642",
      "input": "#303642",
      "ring": "#F0476A",
      "chart-1": "#F0476A",
      "chart-2": "#2B231E",
      "chart-3": "#F0476A",
      "chart-4": "#6FCF97",
      "chart-5": "#F2A93B",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#F0476A",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#F0476A",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#F0476A",
      "radius": "24px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "en-019ef9ed-10eb-7901-bd3e-d5c1df9f83ea",
    "slug": "boule",
    "componentManifest": [
      "button",
      "card",
      "input",
      "textarea",
      "select",
      "dialog",
      "sheet",
      "tabs",
      "badge",
      "separator",
      "checkbox",
      "switch",
      "slider",
      "tooltip",
      "dropdown-menu",
      "table"
    ],
    "installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
    "nativeTokenNames": {
      "colors": [
        "accent",
        "accent_2",
        "accent_3",
        "bg",
        "border",
        "error",
        "info",
        "muted",
        "on_accent",
        "primary",
        "secondary",
        "success",
        "surface",
        "surface_2",
        "text",
        "warning"
      ],
      "typography": [
        "base_size",
        "body_font",
        "google_fonts_url",
        "heading_font",
        "heading_transform",
        "heading_weight",
        "letter_spacing",
        "line_height",
        "mono_font",
        "scale_ratio"
      ],
      "radii": [
        "full",
        "lg",
        "md",
        "none",
        "sm",
        "xl"
      ],
      "shadows": [
        "lg",
        "md",
        "sm"
      ],
      "spacing": [
        "base",
        "scale"
      ],
      "surfaces": [
        "bg_pattern",
        "card_style",
        "treatment"
      ],
      "borders": [
        "accent_width",
        "character",
        "default_width",
        "style"
      ],
      "motion": [
        "duration",
        "easing",
        "philosophy"
      ]
    }
  }
}
```
in the wild

embodiments

DESIGN.md

at a glance

Typography

headline-lgHanken Grotesk · 33px · 700

The quick brown fox jumps

headline-mdHanken Grotesk · 27px · 600

The quick brown fox jumps

body-mdInter Tight · 17px · 400

The quick brown fox jumps

label-mdSpace Mono · 12px · 600

The quick brown fox jumps

shadcn/ui

implementation kit

built with
remix lane

try a remix

Keep Boule and swap a palette and an art style onto it. The landing & dashboard recolor live.

UI language · fixed
Boule
Palette
Art style
Landing Page
live preview · recolored + filled
lineage

Family

Evolved from
related

More like this