Maquette
Maquette is an interface language of cut-paper pieces pinned to a rust table.
Its pictures are drawn in Shadowbox.
Download DESIGN.md
Tokens, rules and the paired art style Shadowbox.
Preview
Typography
Each face set in this language's own words.
Maquette
Maquette
Maquette is an interface language of cut-paper pieces pinned to a rust table.
Maquette is an interface language of cut-paper pieces pinned to a rust table.
Specification
Philosophy
summary
Maquette is an interface language of cut-paper pieces pinned to a rust table. Each piece is a plane of cardstock at its own depth, read from its cast shadow and never from a line drawn around it, and aqua thread joins the pieces that belong together. The page is the table: a saturated rust ground, cream paper pieces, ink type, deep-teal actions and aqua thread as the cool note. Drag a piece and its threads follow; drag the table and it pans; Put them back resets. The depth-stack of three shadows (far, mid, near) carries every role.
It values
- The page is a table: free-placed pieces, not stacked sections.
- Depth is the hierarchy: how far a plane floats says how much it matters.
- Thread is structure: a dotted aqua line shows what belongs with what.
- Teal is for the one thing to press; aqua is a highlighter, never a field.
- Real shadow-box images for every scene; no CSS stand-ins.
It refuses
- Borders, outlines or grey rules to separate pieces.
- Cream-and-coral defaults, gradient scrims and dot-grain washes.
- Fake CSS dioramas where a shadow-box image belongs.
- Tracked uppercase kickers and em dashes in copy.
- Muddy, desaturated paper colours.
visual character
- Rust table #B8431F, flat and saturated, with no grain.
- Cream paper #FBF2DD pieces, rotated a degree or two, each pinned with an aqua or rust dot.
- Rufina at weight 400 for display, Fustat for body at 17px.
- Three-depth shadows tinted a dark rust, never grey.
- A dotted aqua thread joining pinned pieces.
- Radii 16 and 9999 only.
lineage
Revised in place from the live Maquette (cream ground, coral accent) to arni's approved round 6 take: the ground moved to a saturated rust table with cool teal and aqua, the layout became a thread-linked canvas, and fonts moved to Rufina and Fustat. The shadow-box art, three-depth shadows, cut-paper materials and radii 16 and 9999 are kept.
Tokens
colors16
typography11
- heading font
- Rufina
- body font
- Fustat
- heading weight
- 400
- body weight
- 400
- button weight
- 800
- heading transform
- none
- letter spacing
- -0.02em on display; -0.01em on body
- base size
- 17px
- line height
- 1.5
- scale
- 14.5px, 17px, 20px, 22px, 24px, 34px, 44px to 60px, 84px
- google fonts url
- https://fonts.googleapis.com/css2?family=Rufina:wght@400;700&family=Fustat:wght@400;600;800&display=swap
radii4
- none
- 0px
- soft
- 16px
- card
- 24px
- pill
- 9999px
shadows4
- far
- 0 2px 6px rgba(60,15,5,.28)
- mid
- 0 10px 22px -6px rgba(60,15,5,.45)
- near
- 0 24px 40px -10px rgba(60,15,5,.55), 0 4px 10px rgba(60,15,5,.3)
- inset
- inset 0 2px 6px rgba(60,15,5,.22)
spacing2
- base
- 8px
- scale
- 8px, 14px, 20px, 26px, 36px, 46px, 56px, 96px
surfaces7
- treatment
- cut-paper pieces at three depths pinned to a flat rust table
- table
- #B8431F
- piece paper
- #FBF2DD
- piece rust
- #8C2A10
- piece teal
- #0B4F5C
- piece aqua
- #8FE3DA
- well
- #EEDFC0
borders2
- default
- none
- note
- No border, outline or rule anywhere; shape and cast shadow separate every piece. The only line is the dotted aqua thread.
motion3
- duration
- 150ms
- easing
- ease
- principle
- A hovered or held piece lifts a plane (translate -4px, near shadow); dragging a piece draws its threads after it; no bounce; reduced motion removes the lift and keeps the settled layout
controls3
- height
- 52px
- radius
- 16px wells, 9999px buttons and tabs
- focus
- 3px aqua outline at 3px offset on the table, teal on paper
Rules
composition
- Treat the page as a table and place each piece freely at its own depth and angle, a degree or two off square.
- Pin every piece with a dot and run a dotted aqua thread between pieces that relate.
- Keep the table full width and let it pan vertically only; never push text outside the viewport.
- On phones, stack the pieces in one column, alternate them left and right, and join each with a short thread.
hierarchy
- Reserve the near shadow and teal for the one thing to press; the mid plane carries the working surface; the far plane is quiet chrome.
- Display type in Rufina 400 at 44 to 84px; piece titles at 28 to 36px; body in Fustat 17px; captions 14.5px.
- Ink is for type on paper, white on the rust table, and nothing is ever set grey.
density
Low to medium: pieces 36 to 44px inside, 46 to 56px between, one clear action per view.
signature patterns
- The depth-stack: far 2px/6px, mid 10px/22px, near 22px/40px shadows, tinted rust and mapped to roles.
- Pinned pieces: a 20px dot at the top centre of each piece, aqua on dark pieces and rust on paper.
- Thread: dotted aqua (5px stroke, 2 11 dash) between pinned pieces; drag a piece and it follows.
- Put them back: one pill that returns every piece to its first position.
Layout
grid
- type
- free-placed canvas on a rust table
- max width
- 1500px canvas on the landing, 1280px (1440px from 1700px) on the embodiment
- gutter
- 20px phone, 44px desktop
- column behavior
- Desktop pieces are absolutely placed in percent of the canvas; the embodiment uses 12 columns; tablets (601 to 1199px) use their own placement; phones stack in one column
whitespace
- section gap
- 46px between stacked pieces on phones, 56px between rows on desktop
- card gap
- 32px
- content padding
- 36 to 44px inside a piece, more above the title so it never sits on the pin
- approach
- Space is the table: gaps are rust ground, and the thread crosses them.
density
- default
- comfortable
- comfortable
- button height 52pxinput height 52pxrow height 56px
responsive
Desktop (1280px): freely placed pieces with threads and drag. Tablet (601 to 1199px): a second placement over a taller canvas. Phone (390px): one column, pieces alternate sides, a vertical thread joins them, no dragging. Above 1500px the canvas caps and centres.
breakpoints
- mobile
- 390px
- phone max
- 600px
- tablet
- 834px
- desktop
- 1280px
- ultrawide
- 2560px
Guidance
Do
- Let shadow and distance carry hierarchy, never a line.
- Keep the rust ground saturated and the paper clean.
- Use one teal action per view and aqua only as thread and highlight.
- Stage lists as pieces on the table with real shadow-box images.
- Rotate pieces a degree or two, and keep text upright inside them.
Avoid
- Draw a border, outline or grey rule around anything.
- Use cream-with-coral, gradient scrims, dot grain or fake CSS dioramas.
- Set aqua as a field behind long text, or white on aqua.
- Put em dashes or tracked uppercase kickers in copy.
- Let pieces carry text off the viewport.
Imagery
pairs with
shadowbox-papercut-diorama
art style id
en-019efdd8-8a3f-7b52-8fa6-20cded547f84
summary
Shadow-box paper dioramas in the language's own cardstock: cream, deep teal, pale aqua, terracotta and ink, lit from the upper left, three clear depths and fibrous cut edges. Scenes are small places: a river valley with a footbridge, a harbour wall with three lanterns, an orchard of twelve round trees.
subjects
- a river valley village with a footbridge
- a harbour wall with three lanterns
- an orchard of twelve round trees
usage
One large valley image as the hero piece painted with var(--hero-image) on a real element; two square images as shelf pieces. Images sit inside paper pieces with a 14 to 18px paper margin and a radius of 16.
avoid
Outlines, ink lines, text in the image, gradients, glow, muddy colours, photographs, and images edge to edge over copy.
Katagami spec file
# Maquette
## Philosophy
Maquette is an interface language of cut-paper pieces pinned to a rust table. Each piece is a plane of cardstock at its own depth, read from its cast shadow and never from a line drawn around it, and aqua thread joins the pieces that belong together. The page is the table: a saturated rust ground, cream paper pieces, ink type, deep-teal actions and aqua thread as the cool note. Drag a piece and its threads follow; drag the table and it pans; Put them back resets. The depth-stack of three shadows (far, mid, near) carries every role.
### Values
- The page is a table: free-placed pieces, not stacked sections.
- Depth is the hierarchy: how far a plane floats says how much it matters.
- Thread is structure: a dotted aqua line shows what belongs with what.
- Teal is for the one thing to press; aqua is a highlighter, never a field.
- Real shadow-box images for every scene; no CSS stand-ins.
### Anti-Values
- Borders, outlines or grey rules to separate pieces.
- Cream-and-coral defaults, gradient scrims and dot-grain washes.
- Fake CSS dioramas where a shadow-box image belongs.
- Tracked uppercase kickers and em dashes in copy.
- Muddy, desaturated paper colours.
### Visual Character
- Rust table #B8431F, flat and saturated, with no grain.
- Cream paper #FBF2DD pieces, rotated a degree or two, each pinned with an aqua or rust dot.
- Rufina at weight 400 for display, Fustat for body at 17px.
- Three-depth shadows tinted a dark rust, never grey.
- A dotted aqua thread joining pinned pieces.
- Radii 16 and 9999 only.
### Lineage
> Revised in place from the live Maquette (cream ground, coral accent) to arni's approved round 6 take: the ground moved to a saturated rust table with cool teal and aqua, the layout became a thread-linked canvas, and fonts moved to Rufina and Fustat. The shadow-box art, three-depth shadows, cut-paper materials and radii 16 and 9999 are kept.
## Tokens
### Colors
| Name | Value |
|------|-------|
| bg | `#B8431F` |
| surface | `#8C2A10` |
| text | `#FFFFFF` |
| muted | `#FFEBDD` |
| border | `#D2663F` |
| accent | `#8FE3DA` |
| on_accent | `#1B0F0A` |
| success | `#B6F0C8` |
| warning | `#FFE08A` |
| error | `#FFC9C0` |
| info | `#CBE6FF` |
| paper | `#FBF2DD` |
| ink | `#1B0F0A` |
| ink_soft | `#5A3A2E` |
| teal | `#0B4F5C` |
| peach | `#FFB38F` |
### Typography
- **Heading Font**: Rufina
- **Body Font**: Fustat
- **Heading Weight**: 400
- **Body Weight**: 400
- **Button Weight**: 800
- **Heading Transform**: none
- **Letter Spacing**: -0.02em on display; -0.01em on body
- **Base Size**: 17px
- **Line Height**: 1.5
- **Scale**: ["14.5px","17px","20px","22px","24px","34px","44px to 60px","84px"]
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Rufina:wght@400;700&family=Fustat:wght@400;600;800&display=swap
### Radii
- **None**: 0px
- **Soft**: 16px
- **Card**: 24px
- **Pill**: 9999px
### Shadows
- **Far**: 0 2px 6px rgba(60,15,5,.28)
- **Mid**: 0 10px 22px -6px rgba(60,15,5,.45)
- **Near**: 0 24px 40px -10px rgba(60,15,5,.55), 0 4px 10px rgba(60,15,5,.3)
- **Inset**: inset 0 2px 6px rgba(60,15,5,.22)
### Spacing
- **Base**: 8px
- **Scale**: ["8px","14px","20px","26px","36px","46px","56px","96px"]
### Surfaces
- **Treatment**: cut-paper pieces at three depths pinned to a flat rust table
- **Table**: #B8431F
- **Piece Paper**: #FBF2DD
- **Piece Rust**: #8C2A10
- **Piece Teal**: #0B4F5C
- **Piece Aqua**: #8FE3DA
- **Well**: #EEDFC0
### Borders
- **Default**: none
- **Note**: No border, outline or rule anywhere; shape and cast shadow separate every piece. The only line is the dotted aqua thread.
### Motion
- **Duration**: 150ms
- **Easing**: ease
- **Principle**: A hovered or held piece lifts a plane (translate -4px, near shadow); dragging a piece draws its threads after it; no bounce; reduced motion removes the lift and keeps the settled layout
### Controls
- **Height**: 52px
- **Radius**: 16px wells, 9999px buttons and tabs
- **Focus**: 3px aqua outline at 3px offset on the table, teal on paper
## Rules
### Composition
- Treat the page as a table and place each piece freely at its own depth and angle, a degree or two off square.
- Pin every piece with a dot and run a dotted aqua thread between pieces that relate.
- Keep the table full width and let it pan vertically only; never push text outside the viewport.
- On phones, stack the pieces in one column, alternate them left and right, and join each with a short thread.
### Hierarchy
- Reserve the near shadow and teal for the one thing to press; the mid plane carries the working surface; the far plane is quiet chrome.
- Display type in Rufina 400 at 44 to 84px; piece titles at 28 to 36px; body in Fustat 17px; captions 14.5px.
- Ink is for type on paper, white on the rust table, and nothing is ever set grey.
### Density
Low to medium: pieces 36 to 44px inside, 46 to 56px between, one clear action per view.
### Signature Patterns
- The depth-stack: far 2px/6px, mid 10px/22px, near 22px/40px shadows, tinted rust and mapped to roles.
- Pinned pieces: a 20px dot at the top centre of each piece, aqua on dark pieces and rust on paper.
- Thread: dotted aqua (5px stroke, 2 11 dash) between pinned pieces; drag a piece and it follows.
- Put them back: one pill that returns every piece to its first position.
## Layout
### Grid
- **Type**: free-placed canvas on a rust table
- **Max Width**: 1500px canvas on the landing, 1280px (1440px from 1700px) on the embodiment
- **Gutter**: 20px phone, 44px desktop
- **Column Behavior**: Desktop pieces are absolutely placed in percent of the canvas; the embodiment uses 12 columns; tablets (601 to 1199px) use their own placement; phones stack in one column
### Whitespace
- **Section Gap**: 46px between stacked pieces on phones, 56px between rows on desktop
- **Card Gap**: 32px
- **Content Padding**: 36 to 44px inside a piece, more above the title so it never sits on the pin
- **Approach**: Space is the table: gaps are rust ground, and the thread crosses them.
### Density
- **Default**: comfortable
- **Comfortable**: {"button_height":"52px","input_height":"52px","row_height":"56px"}
### Responsive
Desktop (1280px): freely placed pieces with threads and drag. Tablet (601 to 1199px): a second placement over a taller canvas. Phone (390px): one column, pieces alternate sides, a vertical thread joins them, no dragging. Above 1500px the canvas caps and centres.
### Breakpoints
- **Mobile**: 390px
- **Phone Max**: 600px
- **Tablet**: 834px
- **Desktop**: 1280px
- **Ultrawide**: 2560px
## Guidance
### Do
- Let shadow and distance carry hierarchy, never a line.
- Keep the rust ground saturated and the paper clean.
- Use one teal action per view and aqua only as thread and highlight.
- Stage lists as pieces on the table with real shadow-box images.
- Rotate pieces a degree or two, and keep text upright inside them.
### Don't
- Draw a border, outline or grey rule around anything.
- Use cream-with-coral, gradient scrims, dot grain or fake CSS dioramas.
- Set aqua as a field behind long text, or white on aqua.
- Put em dashes or tracked uppercase kickers in copy.
- Let pieces carry text off the viewport.
### Accessibility
White on rust #B8431F and muted #FFEBDD on rust clear AA; ink #1B0F0A on paper #FBF2DD is 16:1; ink on aqua is 12:1; paper on teal #0B4F5C is 9:1. Every control is explicitly styled with a 3px aqua (table) or teal (paper) focus outline. The settled layout renders with no JavaScript, dragging is an enhancement, and prefers-reduced-motion removes the lift.
### Usage Context
Whiteboards, moodboards, spatial notes, story and planning tools, and any product where ideas should feel like paper pieces laid out and joined on a table.
## Imagery Direction
### Pairs With
shadowbox-papercut-diorama
### Art Style Id
en-019efdd8-8a3f-7b52-8fa6-20cded547f84
### Summary
Shadow-box paper dioramas in the language's own cardstock: cream, deep teal, pale aqua, terracotta and ink, lit from the upper left, three clear depths and fibrous cut edges. Scenes are small places: a river valley with a footbridge, a harbour wall with three lanterns, an orchard of twelve round trees.
### Subjects
- a river valley village with a footbridge
- a harbour wall with three lanterns
- an orchard of twelve round trees
### Usage
One large valley image as the hero piece painted with var(--hero-image) on a real element; two square images as shelf pieces. Images sit inside paper pieces with a 14 to 18px paper margin and a radius of 16.
### Avoid
Outlines, ink lines, text in the image, gradients, glow, muddy colours, photographs, and images edge to edge over copy.
DESIGN.md file
---
version: "alpha"
name: "Maquette"
description: "Maquette is an interface language of cut-paper pieces pinned to a rust table. Each piece is a plane of cardstock at its own depth, read from its cast shadow and never from a line drawn around it, and aqua thread joins the pieces that bel..."
colors:
bg: "#B8431F"
surface: "#8C2A10"
text: "#FFFFFF"
muted: "#FFEBDD"
border: "#D2663F"
accent: "#8FE3DA"
on_accent: "#1B0F0A"
success: "#B6F0C8"
warning: "#FFE08A"
error: "#FFC9C0"
info: "#CBE6FF"
paper: "#FBF2DD"
ink: "#1B0F0A"
ink_soft: "#5A3A2E"
teal: "#0B4F5C"
peach: "#FFB38F"
typography:
headline-lg:
fontFamily: "Rufina"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Rufina"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Fustat"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "Fustat"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
soft: "16px"
card: "24px"
pill: "9999px"
spacing:
base: "8px"
xs: "8px"
sm: "14px"
md: "20px"
lg: "26px"
xl: "36px"
2xl: "46px"
3xl: "56px"
4xl: "96px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
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-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-paper:
backgroundColor: "{colors.paper}"
color-reference-ink:
backgroundColor: "{colors.ink}"
color-reference-ink_soft:
backgroundColor: "{colors.ink_soft}"
color-reference-teal:
backgroundColor: "{colors.teal}"
color-reference-peach:
backgroundColor: "{colors.peach}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "{colors.on_accent}"
typography: "{typography.label-md}"
rounded: "{rounded.none}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.card}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.none}"
height: "44px"
---
# Maquette
## Overview
Maquette is an interface language of cut-paper pieces pinned to a rust table. Each piece is a plane of cardstock at its own depth, read from its cast shadow and never from a line drawn around it, and aqua thread joins the pieces that belong together. The page is the table: a saturated rust ground, cream paper pieces, ink type, deep-teal actions and aqua thread as the cool note. Drag a piece and its threads follow; drag the table and it pans; Put them back resets. The depth-stack of three shadows (far, mid, near) carries every role.
### Values
- The page is a table: free-placed pieces, not stacked sections.
- Depth is the hierarchy: how far a plane floats says how much it matters.
- Thread is structure: a dotted aqua line shows what belongs with what.
- Teal is for the one thing to press; aqua is a highlighter, never a field.
- Real shadow-box images for every scene; no CSS stand-ins.
### Anti-Values
- Borders, outlines or grey rules to separate pieces.
- Cream-and-coral defaults, gradient scrims and dot-grain washes.
- Fake CSS dioramas where a shadow-box image belongs.
- Tracked uppercase kickers and em dashes in copy.
- Muddy, desaturated paper colours.
### Visual Character
- Rust table #B8431F, flat and saturated, with no grain.
- Cream paper #FBF2DD pieces, rotated a degree or two, each pinned with an aqua or rust dot.
- Rufina at weight 400 for display, Fustat for body at 17px.
- Three-depth shadows tinted a dark rust, never grey.
- A dotted aqua thread joining pinned pieces.
- Radii 16 and 9999 only.
### Lineage
> Revised in place from the live Maquette (cream ground, coral accent) to arni's approved round 6 take: the ground moved to a saturated rust table with cool teal and aqua, the layout became a thread-linked canvas, and fonts moved to Rufina and Fustat. The shadow-box art, three-depth shadows, cut-paper materials and radii 16 and 9999 are kept.
## 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 | `#B8431F` |
| surface | `#8C2A10` |
| text | `#FFFFFF` |
| muted | `#FFEBDD` |
| border | `#D2663F` |
| accent | `#8FE3DA` |
| on_accent | `#1B0F0A` |
| success | `#B6F0C8` |
| warning | `#FFE08A` |
| error | `#FFC9C0` |
| info | `#CBE6FF` |
| paper | `#FBF2DD` |
| ink | `#1B0F0A` |
| ink_soft | `#5A3A2E` |
| teal | `#0B4F5C` |
| peach | `#FFB38F` |
## Typography
Load the fonts from Google Fonts: https://fonts.googleapis.com/css2?family=Rufina:wght@400;700&family=Fustat:wght@400;600;800&display=swap
- **Headline-Lg**: Rufina, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Rufina, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Fustat, 17px, weight 400, line-height 1.5.
- **Label-Md**: Fustat, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `8px`
- **Sm**: `14px`
- **Md**: `20px`
- **Lg**: `26px`
- **Xl**: `36px`
- **2xl**: `46px`
- **3xl**: `56px`
- **4xl**: `96px`
### Grid
- **Type**: free-placed canvas on a rust table
- **Max Width**: 1500px canvas on the landing, 1280px (1440px from 1700px) on the embodiment
- **Gutter**: 20px phone, 44px desktop
- **Column Behavior**: Desktop pieces are absolutely placed in percent of the canvas; the embodiment uses 12 columns; tablets (601 to 1199px) use their own placement; phones stack in one column
### Whitespace
- **Section Gap**: 46px between stacked pieces on phones, 56px between rows on desktop
- **Card Gap**: 32px
- **Content Padding**: 36 to 44px inside a piece, more above the title so it never sits on the pin
- **Approach**: Space is the table: gaps are rust ground, and the thread crosses them.
### Density
- **Default**: comfortable
- **Comfortable**: {"button_height":"52px","input_height":"52px","row_height":"56px"}
### Responsive
Desktop (1280px): freely placed pieces with threads and drag. Tablet (601 to 1199px): a second placement over a taller canvas. Phone (390px): one column, pieces alternate sides, a vertical thread joins them, no dragging. Above 1500px the canvas caps and centres.
### Breakpoints
- **Mobile**: 390px
- **Phone Max**: 600px
- **Tablet**: 834px
- **Desktop**: 1280px
- **Ultrawide**: 2560px
## Elevation & Depth
### Shadows
- **Far**: 0 2px 6px rgba(60,15,5,.28)
- **Mid**: 0 10px 22px -6px rgba(60,15,5,.45)
- **Near**: 0 24px 40px -10px rgba(60,15,5,.55), 0 4px 10px rgba(60,15,5,.3)
- **Inset**: inset 0 2px 6px rgba(60,15,5,.22)
## Shapes
### Rounded
- **None**: `0px`
- **Soft**: `16px`
- **Card**: `24px`
- **Pill**: `9999px`
### Surfaces
- **Treatment**: cut-paper pieces at three depths pinned to a flat rust table
- **Table**: #B8431F
- **Piece Paper**: #FBF2DD
- **Piece Rust**: #8C2A10
- **Piece Teal**: #0B4F5C
- **Piece Aqua**: #8FE3DA
- **Well**: #EEDFC0
### Borders
- **Default**: none
- **Note**: No border, outline or rule anywhere; shape and cast shadow separate every piece. The only line is the dotted aqua thread.
## Components
### Composition
- Treat the page as a table and place each piece freely at its own depth and angle, a degree or two off square.
- Pin every piece with a dot and run a dotted aqua thread between pieces that relate.
- Keep the table full width and let it pan vertically only; never push text outside the viewport.
- On phones, stack the pieces in one column, alternate them left and right, and join each with a short thread.
### Hierarchy
- Reserve the near shadow and teal for the one thing to press; the mid plane carries the working surface; the far plane is quiet chrome.
- Display type in Rufina 400 at 44 to 84px; piece titles at 28 to 36px; body in Fustat 17px; captions 14.5px.
- Ink is for type on paper, white on the rust table, and nothing is ever set grey.
### Density
Low to medium: pieces 36 to 44px inside, 46 to 56px between, one clear action per view.
### Signature Patterns
- The depth-stack: far 2px/6px, mid 10px/22px, near 22px/40px shadows, tinted rust and mapped to roles.
- Pinned pieces: a 20px dot at the top centre of each piece, aqua on dark pieces and rust on paper.
- Thread: dotted aqua (5px stroke, 2 11 dash) between pinned pieces; drag a piece and it follows.
- Put them back: one pill that returns every piece to its first position.
## 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-01a101b2-fc3c-71d1-a693-5d32516bcb6e/DESIGN.with-shadcn.md`.
Machine-readable companions for automation: `/language/en-01a101b2-fc3c-71d1-a693-5d32516bcb6e/shadcn.json` (registry theme), `/language/en-01a101b2-fc3c-71d1-a693-5d32516bcb6e/shadcn-components.md` (component recipes) and `/language/en-01a101b2-fc3c-71d1-a693-5d32516bcb6e/shadcn-shots.json` (preview shots). The human-facing handoff is still 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 Let shadow and distance carry hierarchy, never a line.
- Do Keep the rust ground saturated and the paper clean.
- Do Use one teal action per view and aqua only as thread and highlight.
- Do Stage lists as pieces on the table with real shadow-box images.
- Do Rotate pieces a degree or two, and keep text upright inside them.
- Don't Draw a border, outline or grey rule around anything.
- Don't Use cream-with-coral, gradient scrims, dot grain or fake CSS dioramas.
- Don't Set aqua as a field behind long text, or white on aqua.
- Don't Put em dashes or tracked uppercase kickers in copy.
- Don't Let pieces carry text off the viewport.
### Accessibility
White on rust #B8431F and muted #FFEBDD on rust clear AA; ink #1B0F0A on paper #FBF2DD is 16:1; ink on aqua is 12:1; paper on teal #0B4F5C is 9:1. Every control is explicitly styled with a 3px aqua (table) or teal (paper) focus outline. The settled layout renders with no JavaScript, dragging is an enhancement, and prefers-reduced-motion removes the lift.
### Usage Context
Whiteboards, moodboards, spatial notes, story and planning tools, and any product where ideas should feel like paper pieces laid out and joined on a table.
## Imagery Direction
### Pairs With
shadowbox-papercut-diorama
### Art Style Id
en-019efdd8-8a3f-7b52-8fa6-20cded547f84
### Summary
Shadow-box paper dioramas in the language's own cardstock: cream, deep teal, pale aqua, terracotta and ink, lit from the upper left, three clear depths and fibrous cut edges. Scenes are small places: a river valley with a footbridge, a harbour wall with three lanterns, an orchard of twelve round trees.
### Subjects
- a river valley village with a footbridge
- a harbour wall with three lanterns
- an orchard of twelve round trees
### Usage
One large valley image as the hero piece painted with var(--hero-image) on a real element; two square images as shelf pieces. Images sit inside paper pieces with a 14 to 18px paper margin and a radius of 16.
### Avoid
Outlines, ink lines, text in the image, gradients, glow, muddy colours, photographs, and images edge to edge over copy.
shadcn/ui theme file
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "maquette",
"type": "registry:theme",
"title": "Maquette shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#B8431F",
"foreground": "#FFFFFF",
"card": "#8C2A10",
"card-foreground": "#FFFFFF",
"popover": "#8C2A10",
"popover-foreground": "#FFFFFF",
"primary": "#FFFFFF",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#FFEBDD",
"muted-foreground": "#FFFFFF",
"accent": "#8FE3DA",
"accent-foreground": "#111111",
"destructive": "#FFC9C0",
"border": "#D2663F",
"input": "#D2663F",
"ring": "#8FE3DA",
"chart-1": "#FFFFFF",
"chart-2": "#f4f4f5",
"chart-3": "#8FE3DA",
"chart-4": "#B6F0C8",
"chart-5": "#FFE08A",
"sidebar": "#8C2A10",
"sidebar-foreground": "#FFFFFF",
"sidebar-primary": "#FFFFFF",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#CBE6FF",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#D2663F",
"sidebar-ring": "#8FE3DA",
"radius": "0.625rem"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#FFFFFF",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#8FE3DA",
"accent-foreground": "#111111",
"destructive": "#FFC9C0",
"border": "#303642",
"input": "#303642",
"ring": "#8FE3DA",
"chart-1": "#FFFFFF",
"chart-2": "#f4f4f5",
"chart-3": "#8FE3DA",
"chart-4": "#B6F0C8",
"chart-5": "#FFE08A",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#FFFFFF",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#8FE3DA",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#303642",
"sidebar-ring": "#8FE3DA",
"radius": "0.625rem"
}
},
"meta": {
"source": "katagami",
"languageId": "en-01a101b2-fc3c-71d1-a693-5d32516bcb6e",
"slug": "maquette",
"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",
"bg",
"border",
"error",
"info",
"ink",
"ink_soft",
"muted",
"on_accent",
"paper",
"peach",
"success",
"surface",
"teal",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"body_weight",
"button_weight",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"scale"
],
"radii": [
"card",
"none",
"pill",
"soft"
],
"shadows": [
"far",
"inset",
"mid",
"near"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"piece_aqua",
"piece_paper",
"piece_rust",
"piece_teal",
"table",
"treatment",
"well"
],
"borders": [
"default",
"note"
],
"motion": [
"duration",
"easing",
"principle"
],
"controls": [
"focus",
"height",
"radius"
]
}
}
}
```