back to gallery
design language·civic-press

Civic Press

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
Civic Press is a design language for cultural institutions and the programmes they run — theatres, museums, festivals, libraries, community halls. It treats every screen like the printed programme pinned by the door: legible from across the foyer, honest about what's left, and warm enough to feel public-spirited rather than corporate. It evolves Constructive Grid Modernism's Swiss discipline and sharpens it with one governing idea — colour is a live demand signal, not decoration.
values
Legible at a glanceHonest about availabilityPublic, not corporateThe grid as civic orderWarmth without preciousness
anti-values
×Decorative gradients×Dark corporate dashboards×Hype and spectacle×Hidden availability×Four or more accents
tokens
colors16 items
primary
#C8442A
secondary
#14213D
accent
#E8A33D
background
#FFFFFF
surface
#FFFFFF
text
#000000
muted
#5F5F5F
border
#000000
error
#C8442A
success
#007A3D
warning
#FFD400
info
#14213D
neutral_100
#F3F3F3
neutral_200
#D9D9D9
black
#000000
white
#FFFFFF
typography8 items
heading font
IBM Plex Sans Condensed
body font
IBM Plex Sans
mono font
IBM Plex Mono
base size
16px
scale ratio
1.25
line height
1.42
letter spacing
-0.02em
google fonts url
https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans+Condensed:wght@500;600;700&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap
spacing2 items
base
8px
scale
4px, 8px, 12px, 16px, 24px, 32px, 48px, 64px, 96px
radii5 items
none
0px
sm
0px
md
16px
lg
16px
full
9999px
shadows3 items
sm
3px 3px 0 #000000
md
6px 6px 0 #000000
lg
10px 10px 0 #000000
surfaces3 items
treatment
flat
card style
Flat white rectangular panels with black 2px borders, internal ruled dividers, and occasional offset black slab shadows.
bg pattern
grid
borders4 items
default width
2px
accent width
8px
style
solid
character
Hard black construction lines that behave like print crop marks and Swiss grid rules rather than decorative outlines.
motion3 items
duration
140ms
easing
cubic-bezier(0.2, 0, 0, 1)
philosophy
snappy, mechanical state changes with no bounce and no ornamental animation
rules
heat scale
Availability is read as warmth on one scale — ink (plenty) -> green (good) -> amber (filling) -> ember (almost gone) -> ink-on-ember (sold out). Status pills, demand bars and seat maps all use it; colour is never decorative.
composition

Visible 12-column construction grid; asymmetric, left-weighted poster composition. The screen reads like the programme pinned by the door.

metadata

Dates, times, venues, durations and prices are set in IBM Plex Mono as fine print — a printed programme's caption layer.

working blocks

Dense data (schedules, seat maps, wayfinding) sits in ink working-blocks; headlines breathe in white poster space.

hierarchy

Condensed display sets the headline; the heat signal sets the priority; mono carries the facts.

density

Tiered — poster-loose at the top, programme-dense in the middle, fine-print at the bottom.

layout
grid

12-column rational grid, visible alignment, asymmetric and left-weighted.

density

Tiered by section: hero (loose) -> schedule/timeline/seat-map (dense) -> metadata (fine print).

whitespace

Generous; titles always carry padding above them.

radii

0 / 16 / 9999 only; no borders.

breakpoints
sm
640
md
860
lg
1200
guidance
do
  • Let ember mean scarcity — reserve it for 'almost gone' and live signals.
  • Keep ink for text, structure and dense data.
  • Set all metadata in mono, like a printed programme.
  • Pair imagery with the Risograph Ember art style.
  • Give titles room; align everything to the grid.
avoid
  • Tint backgrounds or use gradients.
  • Spend ember decoratively or as a fourth-accent flourish.
  • Hide availability or fake scarcity.
  • Add borders.
  • Let amber and ember compete at equal weight.
imagery
pairs with art style

risograph-ember

summary
Two-ink risograph prints (ember + ink) on warm off-white paper — gig-poster and printed-programme energy. Bold flat shapes, visible halftone grain, slight misregistration. No photography, no gradients.
subjects
modernist civic architectureperformers and audiencessingle bold objectswayfinding and transit
usage

One large riso hero per landing; portrait/feature crops for featured events; never decorative texture.

katagami spec
# Civic Press

## Philosophy

Civic Press is a design language for cultural institutions and the programmes they run — theatres, museums, festivals, libraries, community halls. It treats every screen like the printed programme pinned by the door: legible from across the foyer, honest about what's left, and warm enough to feel public-spirited rather than corporate. It evolves Constructive Grid Modernism's Swiss discipline and sharpens it with one governing idea — colour is a live demand signal, not decoration.

### Values

- Legible at a glance
- Honest about availability
- Public, not corporate
- The grid as civic order
- Warmth without preciousness

### Anti-Values

- Decorative gradients
- Dark corporate dashboards
- Hype and spectacle
- Hidden availability
- Four or more accents

## Tokens

### Colors

| Name | Value |
|------|-------|
| primary | `#C8442A` |
| secondary | `#14213D` |
| accent | `#E8A33D` |
| background | `#FFFFFF` |
| surface | `#FFFFFF` |
| text | `#000000` |
| muted | `#5F5F5F` |
| border | `#000000` |
| error | `#C8442A` |
| success | `#007A3D` |
| warning | `#FFD400` |
| info | `#14213D` |
| neutral_100 | `#F3F3F3` |
| neutral_200 | `#D9D9D9` |
| black | `#000000` |
| white | `#FFFFFF` |

### Typography

- **Heading Font**: IBM Plex Sans Condensed
- **Body Font**: IBM Plex Sans
- **Mono Font**: IBM Plex Mono
- **Base Size**: 16px
- **Scale Ratio**: 1.25
- **Line Height**: 1.42
- **Letter Spacing**: -0.02em
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans+Condensed:wght@500;600;700&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap

### Spacing

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

### Radii

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

### Shadows

- **Sm**: 3px 3px 0 #000000
- **Md**: 6px 6px 0 #000000
- **Lg**: 10px 10px 0 #000000

### Surfaces

- **Treatment**: flat
- **Card Style**: Flat white rectangular panels with black 2px borders, internal ruled dividers, and occasional offset black slab shadows.
- **Bg Pattern**: grid

### Borders

- **Default Width**: 2px
- **Accent Width**: 8px
- **Style**: solid
- **Character**: Hard black construction lines that behave like print crop marks and Swiss grid rules rather than decorative outlines.

### Motion

- **Duration**: 140ms
- **Easing**: cubic-bezier(0.2, 0, 0, 1)
- **Philosophy**: snappy, mechanical state changes with no bounce and no ornamental animation

## Rules

### Heat Scale

Availability is read as warmth on one scale — ink (plenty) -> green (good) -> amber (filling) -> ember (almost gone) -> ink-on-ember (sold out). Status pills, demand bars and seat maps all use it; colour is never decorative.

### Composition

Visible 12-column construction grid; asymmetric, left-weighted poster composition. The screen reads like the programme pinned by the door.

### Metadata

Dates, times, venues, durations and prices are set in IBM Plex Mono as fine print — a printed programme's caption layer.

### Working Blocks

Dense data (schedules, seat maps, wayfinding) sits in ink working-blocks; headlines breathe in white poster space.

### Hierarchy

Condensed display sets the headline; the heat signal sets the priority; mono carries the facts.

### Density

Tiered — poster-loose at the top, programme-dense in the middle, fine-print at the bottom.

## Layout

### Grid

12-column rational grid, visible alignment, asymmetric and left-weighted.

### Density

Tiered by section: hero (loose) -> schedule/timeline/seat-map (dense) -> metadata (fine print).

### Whitespace

Generous; titles always carry padding above them.

### Radii

0 / 16 / 9999 only; no borders.

### Breakpoints

- **Sm**: 640
- **Md**: 860
- **Lg**: 1200

## Guidance

### Do

- Let ember mean scarcity — reserve it for 'almost gone' and live signals.
- Keep ink for text, structure and dense data.
- Set all metadata in mono, like a printed programme.
- Pair imagery with the Risograph Ember art style.
- Give titles room; align everything to the grid.

### Don't

- Tint backgrounds or use gradients.
- Spend ember decoratively or as a fourth-accent flourish.
- Hide availability or fake scarcity.
- Add borders.
- Let amber and ember compete at equal weight.

## Imagery Direction

### Pairs With Art Style

risograph-ember

### Summary

Two-ink risograph prints (ember + ink) on warm off-white paper — gig-poster and printed-programme energy. Bold flat shapes, visible halftone grain, slight misregistration. No photography, no gradients.

### Subjects

- modernist civic architecture
- performers and audiences
- single bold objects
- wayfinding and transit

### Usage

One large riso hero per landing; portrait/feature crops for featured events; never decorative texture.
DESIGN.md
---
version: "alpha"
name: "Civic Press"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
  primary: "#C8442A"
  secondary: "#14213D"
  accent: "#E8A33D"
  background: "#FFFFFF"
  surface: "#FFFFFF"
  text: "#000000"
  muted: "#5F5F5F"
  border: "#000000"
  error: "#C8442A"
  success: "#007A3D"
  warning: "#FFD400"
  info: "#14213D"
  neutral_100: "#F3F3F3"
  neutral_200: "#D9D9D9"
  black: "#000000"
  white: "#FFFFFF"
typography:
  headline-lg:
    fontFamily: "IBM Plex Sans Condensed"
    fontSize: "1.953rem"
    fontWeight: 700
    lineHeight: 1.1
    letterSpacing: "-0.02em"
  headline-md:
    fontFamily: "IBM Plex Sans Condensed"
    fontSize: "1.563rem"
    fontWeight: 600
    lineHeight: 1.15
    letterSpacing: "-0.02em"
  body-md:
    fontFamily: "IBM Plex Sans"
    fontSize: "16px"
    fontWeight: 400
    lineHeight: 1.42
    letterSpacing: "-0.02em"
  label-md:
    fontFamily: "IBM Plex Mono"
    fontSize: "0.75rem"
    fontWeight: 600
    lineHeight: 1
    letterSpacing: "0.08em"
rounded:
  none: "0px"
  sm: "0px"
  md: "16px"
  lg: "16px"
  full: "9999px"
spacing:
  base: "8px"
  xs: "4px"
  sm: "8px"
  md: "12px"
  lg: "16px"
  xl: "24px"
  2xl: "32px"
  3xl: "48px"
  4xl: "64px"
  step-8: "96px"
components:
  color-reference-primary:
    backgroundColor: "{colors.primary}"
  color-reference-secondary:
    backgroundColor: "{colors.secondary}"
  color-reference-accent:
    backgroundColor: "{colors.accent}"
  color-reference-background:
    backgroundColor: "{colors.background}"
  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-error:
    backgroundColor: "{colors.error}"
  color-reference-success:
    backgroundColor: "{colors.success}"
  color-reference-warning:
    backgroundColor: "{colors.warning}"
  color-reference-info:
    backgroundColor: "{colors.info}"
  color-reference-neutral_100:
    backgroundColor: "{colors.neutral_100}"
  color-reference-neutral_200:
    backgroundColor: "{colors.neutral_200}"
  color-reference-black:
    backgroundColor: "{colors.black}"
  color-reference-white:
    backgroundColor: "{colors.white}"
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "#ffffff"
    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"
---

# Civic Press

## Overview

Civic Press is a design language for cultural institutions and the programmes they run — theatres, museums, festivals, libraries, community halls. It treats every screen like the printed programme pinned by the door: legible from across the foyer, honest about what's left, and warm enough to feel public-spirited rather than corporate. It evolves Constructive Grid Modernism's Swiss discipline and sharpens it with one governing idea — colour is a live demand signal, not decoration.

### Values

- Legible at a glance
- Honest about availability
- Public, not corporate
- The grid as civic order
- Warmth without preciousness

### Anti-Values

- Decorative gradients
- Dark corporate dashboards
- Hype and spectacle
- Hidden availability
- Four or more accents

## Colors

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

| Token | Value |
|-------|-------|
| primary | `#C8442A` |
| secondary | `#14213D` |
| accent | `#E8A33D` |
| background | `#FFFFFF` |
| surface | `#FFFFFF` |
| text | `#000000` |
| muted | `#5F5F5F` |
| border | `#000000` |
| error | `#C8442A` |
| success | `#007A3D` |
| warning | `#FFD400` |
| info | `#14213D` |
| neutral_100 | `#F3F3F3` |
| neutral_200 | `#D9D9D9` |
| black | `#000000` |
| white | `#FFFFFF` |

## Typography

- **Headline-Lg**: IBM Plex Sans Condensed, 1.953rem, weight 700, line-height 1.1.
- **Headline-Md**: IBM Plex Sans Condensed, 1.563rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 16px, weight 400, line-height 1.42.
- **Label-Md**: IBM Plex 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**: `96px`

### Grid

12-column rational grid, visible alignment, asymmetric and left-weighted.

### Density

Tiered by section: hero (loose) -> schedule/timeline/seat-map (dense) -> metadata (fine print).

### Whitespace

Generous; titles always carry padding above them.

### Radii

0 / 16 / 9999 only; no borders.

### Breakpoints

- **Sm**: 640
- **Md**: 860
- **Lg**: 1200

## Elevation & Depth

### Shadows

- **Sm**: 3px 3px 0 #000000
- **Md**: 6px 6px 0 #000000
- **Lg**: 10px 10px 0 #000000

## Shapes

### Rounded

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

### Surfaces

- **Treatment**: flat
- **Card Style**: Flat white rectangular panels with black 2px borders, internal ruled dividers, and occasional offset black slab shadows.
- **Bg Pattern**: grid

### Borders

- **Default Width**: 2px
- **Accent Width**: 8px
- **Style**: solid
- **Character**: Hard black construction lines that behave like print crop marks and Swiss grid rules rather than decorative outlines.

## Components

### Heat Scale

Availability is read as warmth on one scale — ink (plenty) -> green (good) -> amber (filling) -> ember (almost gone) -> ink-on-ember (sold out). Status pills, demand bars and seat maps all use it; colour is never decorative.

### Composition

Visible 12-column construction grid; asymmetric, left-weighted poster composition. The screen reads like the programme pinned by the door.

### Metadata

Dates, times, venues, durations and prices are set in IBM Plex Mono as fine print — a printed programme's caption layer.

### Working Blocks

Dense data (schedules, seat maps, wayfinding) sits in ink working-blocks; headlines breathe in white poster space.

### Hierarchy

Condensed display sets the headline; the heat signal sets the priority; mono carries the facts.

### Density

Tiered — poster-loose at the top, programme-dense in the middle, fine-print at the bottom.

## 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-019ef593-0eda-71c1-b412-f7f6fccf2570/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 Let ember mean scarcity — reserve it for 'almost gone' and live signals.
- Do Keep ink for text, structure and dense data.
- Do Set all metadata in mono, like a printed programme.
- Do Pair imagery with the Risograph Ember art style.
- Do Give titles room; align everything to the grid.
- Don't Tint backgrounds or use gradients.
- Don't Spend ember decoratively or as a fourth-accent flourish.
- Don't Hide availability or fake scarcity.
- Don't Add borders.
- Don't Let amber and ember compete at equal weight.

## Imagery Direction

### Pairs With Art Style

risograph-ember

### Summary

Two-ink risograph prints (ember + ink) on warm off-white paper — gig-poster and printed-programme energy. Bold flat shapes, visible halftone grain, slight misregistration. No photography, no gradients.

### Subjects

- modernist civic architecture
- performers and audiences
- single bold objects
- wayfinding and transit

### Usage

One large riso hero per landing; portrait/feature crops for featured events; never decorative texture.
shadcn/ui theme
```json
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "civic-press",
  "type": "registry:theme",
  "title": "Civic Press shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#FFFFFF",
      "foreground": "#000000",
      "card": "#FFFFFF",
      "card-foreground": "#000000",
      "popover": "#FFFFFF",
      "popover-foreground": "#000000",
      "primary": "#C8442A",
      "primary-foreground": "#ffffff",
      "secondary": "#14213D",
      "secondary-foreground": "#ffffff",
      "muted": "#5F5F5F",
      "muted-foreground": "#000000",
      "accent": "#E8A33D",
      "accent-foreground": "#ffffff",
      "destructive": "#C8442A",
      "border": "#000000",
      "input": "#000000",
      "ring": "#E8A33D",
      "chart-1": "#C8442A",
      "chart-2": "#14213D",
      "chart-3": "#E8A33D",
      "chart-4": "#007A3D",
      "chart-5": "#FFD400",
      "sidebar": "#FFFFFF",
      "sidebar-foreground": "#000000",
      "sidebar-primary": "#C8442A",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#14213D",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#000000",
      "sidebar-ring": "#E8A33D",
      "radius": "16px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#C8442A",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#E8A33D",
      "accent-foreground": "#ffffff",
      "destructive": "#C8442A",
      "border": "#303642",
      "input": "#303642",
      "ring": "#E8A33D",
      "chart-1": "#C8442A",
      "chart-2": "#14213D",
      "chart-3": "#E8A33D",
      "chart-4": "#007A3D",
      "chart-5": "#FFD400",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#C8442A",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#E8A33D",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#E8A33D",
      "radius": "16px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "en-019ef593-0eda-71c1-b412-f7f6fccf2570",
    "slug": "civic-press",
    "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",
        "background",
        "black",
        "border",
        "error",
        "info",
        "muted",
        "neutral_100",
        "neutral_200",
        "primary",
        "secondary",
        "success",
        "surface",
        "text",
        "warning",
        "white"
      ],
      "typography": [
        "base_size",
        "body_font",
        "google_fonts_url",
        "heading_font",
        "letter_spacing",
        "line_height",
        "mono_font",
        "scale_ratio"
      ],
      "spacing": [
        "base",
        "scale"
      ],
      "radii": [
        "full",
        "lg",
        "md",
        "none",
        "sm"
      ],
      "shadows": [
        "lg",
        "md",
        "sm"
      ],
      "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 · civic-press
DESIGN.md

at a glance

Typography

headline-lgIBM Plex Sans Condensed · 31px · 700

The quick brown fox jumps

headline-mdIBM Plex Sans Condensed · 25px · 600

The quick brown fox jumps

body-mdIBM Plex Sans · 16px · 400

The quick brown fox jumps

label-mdIBM Plex Mono · 12px · 600

The quick brown fox jumps

shadcn/ui

implementation kit

built with
Palette

Agent-generated

remix lane

try a remix

Keep Civic Pressand 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
Civic Press
Palette
Art style
Landing Page
live preview · recolored + filled
related

More like this