back to gallery
design language·boule

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 source of truth for most agents and apps.

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.
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

bespoke marketing landingopen full page ↗
landing · boule
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

Agent-generated

remix lane

try a remix

Keep Bouleand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.

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

Family

Evolved from
related

More like this