back to gallery
design language·shibuya-payphone-packet-radio

Shibuya Payphone Packet Radio

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
A clean cyber-noir interface language for late-night signal hunting from a rain-streaked Shibuya public phone: black asphalt fields, manga-white panel cuts, and one restrained cyan packet current moving through coin slots, keypad grids, APRS callsigns, and ASCII map panes.
values
Restraint first: the system earns mood through near-black space, white linework, and one cyan signal rather than decorative abundance.Operational fiction: every motif must feel like it belongs to a real coin-operated packet-radio tool, not a mood board of cyberpunk references.Panel discipline: manga gutters and terminal windows share the same grid so emotional scenes and diagnostic data feel like one instrument.Analog wear with clean execution: sticker residue, booth signage, and paper labels appear as crisp frames, not grunge textures that reduce legibility.Signal legibility: APRS traces, callsigns, telemetry, and keypad affordances remain readable at dashboard scale and phone scale.Night-city quiet: generous black pauses and narrow vertical booth columns create loneliness without cluttering the screen.
anti-values
×Generic neon cyberpunk gradients, purple-blue triads, smoky glows, or excessive synthetic color.×SaaS dashboard card sameness, equal three-column summaries, and cheerful rounded component libraries.×Decorative Japanese labels used as filler rather than functional signage, station IDs, or microtype.×Distressed grunge that obscures linework, terminal text, or touch targets.
tokens
borders4 items
accent width
2px
character
Near-invisible white borders at low opacity for most panes; cyan only on active route nodes and payphone controls.
default width
1px
style
solid
colors12 items
accent
#C6403A
background
#08090A
border
#F7F5EC
error
#C6403A
info
#5BC7D6
muted
#8B918D
primary
#5BC7D6
secondary
#F2F0E8
success
#4C8A68
surface
#101214
text
#F7F5EC
warning
#B7833F
motion3 items
duration
180ms
easing
cubic-bezier(.2,.7,.1,1)
philosophy
Motion behaves like a packet acknowledgement: short cyan pulses on route nodes, snap-to-grid hovers, and no floating parallax.
radii5 items
full
9999px
lg
24px
md
16px
none
0
sm
0
shadows3 items
lg
0 26px 80px rgba(0,0,0,0.62)
md
0 0 28px rgba(91,199,214,0.12)
sm
0 0 0 1px rgba(247,245,236,0.08)
spacing2 items
base
8px
scale
4, 8, 12, 16, 24, 32, 48, 64, 96
surfaces3 items
bg pattern
Subtle wet-asphalt vertical reflection stripes plus sparse 1px cyan packet traces behind the content.
card style
Rectangular terminal panels using {colors.surface}, {borders.default_width}, square corners, and internal scan boxes.
treatment
Flat asphalt-black panes with manga-white hairlines, sparse cyan illumination, and no broad gradients.
typography8 items
base size
16px
body font
IBM Plex Sans Condensed
google fonts url
https://fonts.googleapis.com/css2?family=Azeret+Mono:wght@400;500;700&family=IBM+Plex+Sans+Condensed:wght@400;500;600;700&family=Teko:wght@500;600;700&display=swap
heading font
Teko
letter spacing
-0.02em
line height
1.55
mono font
Azeret Mono
scale ratio
1.22
rules
composition
Compose as a manga page crossed with a field terminal: one dominant vertical phone-booth module, one wide ASCII route pane, several narrow diagnostic strips, and at least one full-bleed cyan trace that interrupts the grid. Never use three equal cards; create one large quiet black span and one dense telemetry cluster.
density

Alternate dense terminal telemetry at 4-8px row gaps with 64-96px empty asphalt pauses so the interface feels like waiting for packets in a quiet street.

hierarchy
Display hierarchy comes from compressed booth signage in Teko, small caps callsign chips in mono, and body notes in condensed sans. Cyan identifies live signal and selected affordances only; white linework carries structure; red and amber appear as tiny warning stickers or paper ephemera.
signature patterns
Coin-slot headers: every major module begins with a narrow horizontal capsule/slot, a tiny return notch, and a cyan status tick aligned to the right edge.RF-hop trace overlay: 1px cyan orthogonal and arced lines travel across panel gutters with square packet nodes, callsign labels, and small ACK pulses.Sticker-residue panel frames: offset dashed white rectangles, torn red station tabs, and amber inspection labels sit outside the content box as functional metadata.APRS ASCII scan panes: monospaced map blocks use dotted grid backgrounds, bracketed scan rectangles, timestamp columns, and callsign chips like JA1YRL-7.
layout
breakpoints

Mobile <= 640px, tablet 641-960px, desktop >= 961px with CSS grid reassignments and trace lines simplified on mobile.

density

High information density is confined to terminal panes and keypad clusters; exterior gutters and the booth silhouette stay spacious to preserve noir quiet.

grid
Desktop uses a 12-column max 1360px grid with 16px gutters, a 3-column vertical booth rail, a 6-column route map, and staggered diagnostic strips; tablet collapses to 6 columns; mobile becomes one column with the booth module first.
whitespace

Use 4px micro-gaps within logs, 16-24px panel padding, 48px module separations, and 96px black pauses around the main title to pass the 8:1 spacing rhythm.

guidance
do
  • Use cyan only for live signal, active keypad states, packet route traces, and selected callsign chips.
  • Keep manga panel lines crisp and rectangular; let asymmetric gutters create the emotional frame.
  • Name real operational states such as coin armed, APRS beacon, digipeater hop, ACK delay, and route loss.
  • Use kana or station microtype as signage and labels, never as meaningless decoration.
  • Preserve a dominant black field so the interface feels late-night and existential rather than busy.
  • Make every sticker, warning tab, or residue frame attach to a panel edge with a data purpose.
avoid
  • Do not add purple neon, rainbow chrome, vaporwave gradients, or multiple competing accent colors.
  • Do not build generic SaaS metric cards, equal dashboards, or rounded glassmorphism panels.
  • Do not use blurry grunge overlays that make terminal text or callsigns hard to read.
  • Do not scatter anime references as icons; express the reference through panel structure, HUD overlays, and analog-future restraint.
  • Do not let cyan fill large backgrounds; it must behave like signal, not wallpaper.
  • Do not center everything symmetrically; preserve the booth-column imbalance.
katagami spec
# Shibuya Payphone Packet Radio

## Philosophy

A clean cyber-noir interface language for late-night signal hunting from a rain-streaked Shibuya public phone: black asphalt fields, manga-white panel cuts, and one restrained cyan packet current moving through coin slots, keypad grids, APRS callsigns, and ASCII map panes.

### Values

- Restraint first: the system earns mood through near-black space, white linework, and one cyan signal rather than decorative abundance.
- Operational fiction: every motif must feel like it belongs to a real coin-operated packet-radio tool, not a mood board of cyberpunk references.
- Panel discipline: manga gutters and terminal windows share the same grid so emotional scenes and diagnostic data feel like one instrument.
- Analog wear with clean execution: sticker residue, booth signage, and paper labels appear as crisp frames, not grunge textures that reduce legibility.
- Signal legibility: APRS traces, callsigns, telemetry, and keypad affordances remain readable at dashboard scale and phone scale.
- Night-city quiet: generous black pauses and narrow vertical booth columns create loneliness without cluttering the screen.

### Anti-Values

- Generic neon cyberpunk gradients, purple-blue triads, smoky glows, or excessive synthetic color.
- SaaS dashboard card sameness, equal three-column summaries, and cheerful rounded component libraries.
- Decorative Japanese labels used as filler rather than functional signage, station IDs, or microtype.
- Distressed grunge that obscures linework, terminal text, or touch targets.

### Visual Character

- Use a black-and-white manga panel grid with 2px white borders, thick asymmetric gutters, and one oversized full-height phone-booth column breaking the main layout.
- Route content with thin neon-cyan SVG or CSS trace lines that cross panel gutters, terminate in small square packet nodes, and never become broad gradients.
- Build controls from coin-return slots and payphone keypad geometry: rectangular black keys, white hairline outlines, cyan active states, and compressed numeric labels.
- Layer sticker-residue frames as offset dashed white rectangles and tiny red or amber paper tabs around panels while keeping the interior surfaces flat black.
- Render APRS/TUI information in monospaced ASCII map panes with scan-box overlays, callsign chips, timestamp rows, and diagnostic brackets.

## Tokens

### Borders

- **Accent Width**: 2px
- **Character**: Near-invisible white borders at low opacity for most panes; cyan only on active route nodes and payphone controls.
- **Default Width**: 1px
- **Style**: solid

### Colors

| Name | Value |
|------|-------|
| accent | `#C6403A` |
| background | `#08090A` |
| border | `#F7F5EC` |
| error | `#C6403A` |
| info | `#5BC7D6` |
| muted | `#8B918D` |
| primary | `#5BC7D6` |
| secondary | `#F2F0E8` |
| success | `#4C8A68` |
| surface | `#101214` |
| text | `#F7F5EC` |
| warning | `#B7833F` |

### Motion

- **Duration**: 180ms
- **Easing**: cubic-bezier(.2,.7,.1,1)
- **Philosophy**: Motion behaves like a packet acknowledgement: short cyan pulses on route nodes, snap-to-grid hovers, and no floating parallax.

### Radii

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

### Shadows

- **Lg**: 0 26px 80px rgba(0,0,0,0.62)
- **Md**: 0 0 28px rgba(91,199,214,0.12)
- **Sm**: 0 0 0 1px rgba(247,245,236,0.08)

### Spacing

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

### Surfaces

- **Bg Pattern**: Subtle wet-asphalt vertical reflection stripes plus sparse 1px cyan packet traces behind the content.
- **Card Style**: Rectangular terminal panels using {colors.surface}, {borders.default_width}, square corners, and internal scan boxes.
- **Treatment**: Flat asphalt-black panes with manga-white hairlines, sparse cyan illumination, and no broad gradients.

### Typography

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

## Rules

### Composition

Compose as a manga page crossed with a field terminal: one dominant vertical phone-booth module, one wide ASCII route pane, several narrow diagnostic strips, and at least one full-bleed cyan trace that interrupts the grid. Never use three equal cards; create one large quiet black span and one dense telemetry cluster.

### Density

Alternate dense terminal telemetry at 4-8px row gaps with 64-96px empty asphalt pauses so the interface feels like waiting for packets in a quiet street.

### Hierarchy

Display hierarchy comes from compressed booth signage in Teko, small caps callsign chips in mono, and body notes in condensed sans. Cyan identifies live signal and selected affordances only; white linework carries structure; red and amber appear as tiny warning stickers or paper ephemera.

### Signature Patterns

- Coin-slot headers: every major module begins with a narrow horizontal capsule/slot, a tiny return notch, and a cyan status tick aligned to the right edge.
- RF-hop trace overlay: 1px cyan orthogonal and arced lines travel across panel gutters with square packet nodes, callsign labels, and small ACK pulses.
- Sticker-residue panel frames: offset dashed white rectangles, torn red station tabs, and amber inspection labels sit outside the content box as functional metadata.
- APRS ASCII scan panes: monospaced map blocks use dotted grid backgrounds, bracketed scan rectangles, timestamp columns, and callsign chips like JA1YRL-7.

## Layout

### Breakpoints

Mobile <= 640px, tablet 641-960px, desktop >= 961px with CSS grid reassignments and trace lines simplified on mobile.

### Density

High information density is confined to terminal panes and keypad clusters; exterior gutters and the booth silhouette stay spacious to preserve noir quiet.

### Grid

Desktop uses a 12-column max 1360px grid with 16px gutters, a 3-column vertical booth rail, a 6-column route map, and staggered diagnostic strips; tablet collapses to 6 columns; mobile becomes one column with the booth module first.

### Whitespace

Use 4px micro-gaps within logs, 16-24px panel padding, 48px module separations, and 96px black pauses around the main title to pass the 8:1 spacing rhythm.

## Guidance

### Do

- Use cyan only for live signal, active keypad states, packet route traces, and selected callsign chips.
- Keep manga panel lines crisp and rectangular; let asymmetric gutters create the emotional frame.
- Name real operational states such as coin armed, APRS beacon, digipeater hop, ACK delay, and route loss.
- Use kana or station microtype as signage and labels, never as meaningless decoration.
- Preserve a dominant black field so the interface feels late-night and existential rather than busy.
- Make every sticker, warning tab, or residue frame attach to a panel edge with a data purpose.

### Don't

- Do not add purple neon, rainbow chrome, vaporwave gradients, or multiple competing accent colors.
- Do not build generic SaaS metric cards, equal dashboards, or rounded glassmorphism panels.
- Do not use blurry grunge overlays that make terminal text or callsigns hard to read.
- Do not scatter anime references as icons; express the reference through panel structure, HUD overlays, and analog-future restraint.
- Do not let cyan fill large backgrounds; it must behave like signal, not wallpaper.
- Do not center everything symmetrically; preserve the booth-column imbalance.

### Accessibility

Maintain high contrast between text and black surfaces, reserve cyan as an additional cue rather than the sole indicator, and keep mono telemetry at 12px or larger with strong line-height.

### Usage Context

Best for fictional radio utilities, urban field tools, midnight navigation systems, cyber-noir editorial interfaces, and maker hardware dashboards with a public-infrastructure story.
DESIGN.md
---
version: "alpha"
name: "Shibuya Payphone Packet Radio"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
  accent: "#C6403A"
  background: "#08090A"
  border: "#F7F5EC"
  error: "#C6403A"
  info: "#5BC7D6"
  muted: "#8B918D"
  primary: "#5BC7D6"
  secondary: "#F2F0E8"
  success: "#4C8A68"
  surface: "#101214"
  text: "#F7F5EC"
  warning: "#B7833F"
typography:
  headline-lg:
    fontFamily: "Teko"
    fontSize: "1.816rem"
    fontWeight: 700
    lineHeight: 1.1
    letterSpacing: "-0.02em"
  headline-md:
    fontFamily: "Teko"
    fontSize: "1.488rem"
    fontWeight: 600
    lineHeight: 1.15
    letterSpacing: "-0.02em"
  body-md:
    fontFamily: "IBM Plex Sans Condensed"
    fontSize: "16px"
    fontWeight: 400
    lineHeight: 1.55
    letterSpacing: "-0.02em"
  label-md:
    fontFamily: "Azeret Mono"
    fontSize: "0.75rem"
    fontWeight: 600
    lineHeight: 1
    letterSpacing: "0.08em"
rounded:
  full: "9999px"
  lg: "24px"
  md: "16px"
  none: "0px"
  sm: "0px"
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-accent:
    backgroundColor: "{colors.accent}"
  color-reference-background:
    backgroundColor: "{colors.background}"
  color-reference-border:
    backgroundColor: "{colors.border}"
  color-reference-error:
    backgroundColor: "{colors.error}"
  color-reference-info:
    backgroundColor: "{colors.info}"
  color-reference-muted:
    backgroundColor: "{colors.muted}"
  color-reference-primary:
    backgroundColor: "{colors.primary}"
  color-reference-secondary:
    backgroundColor: "{colors.secondary}"
  color-reference-success:
    backgroundColor: "{colors.success}"
  color-reference-surface:
    backgroundColor: "{colors.surface}"
  color-reference-text:
    backgroundColor: "{colors.text}"
  color-reference-warning:
    backgroundColor: "{colors.warning}"
  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"
---

# Shibuya Payphone Packet Radio

## Overview

A clean cyber-noir interface language for late-night signal hunting from a rain-streaked Shibuya public phone: black asphalt fields, manga-white panel cuts, and one restrained cyan packet current moving through coin slots, keypad grids, APRS callsigns, and ASCII map panes.

### Values

- Restraint first: the system earns mood through near-black space, white linework, and one cyan signal rather than decorative abundance.
- Operational fiction: every motif must feel like it belongs to a real coin-operated packet-radio tool, not a mood board of cyberpunk references.
- Panel discipline: manga gutters and terminal windows share the same grid so emotional scenes and diagnostic data feel like one instrument.
- Analog wear with clean execution: sticker residue, booth signage, and paper labels appear as crisp frames, not grunge textures that reduce legibility.
- Signal legibility: APRS traces, callsigns, telemetry, and keypad affordances remain readable at dashboard scale and phone scale.
- Night-city quiet: generous black pauses and narrow vertical booth columns create loneliness without cluttering the screen.

### Anti-Values

- Generic neon cyberpunk gradients, purple-blue triads, smoky glows, or excessive synthetic color.
- SaaS dashboard card sameness, equal three-column summaries, and cheerful rounded component libraries.
- Decorative Japanese labels used as filler rather than functional signage, station IDs, or microtype.
- Distressed grunge that obscures linework, terminal text, or touch targets.

### Visual Character

- Use a black-and-white manga panel grid with 2px white borders, thick asymmetric gutters, and one oversized full-height phone-booth column breaking the main layout.
- Route content with thin neon-cyan SVG or CSS trace lines that cross panel gutters, terminate in small square packet nodes, and never become broad gradients.
- Build controls from coin-return slots and payphone keypad geometry: rectangular black keys, white hairline outlines, cyan active states, and compressed numeric labels.
- Layer sticker-residue frames as offset dashed white rectangles and tiny red or amber paper tabs around panels while keeping the interior surfaces flat black.
- Render APRS/TUI information in monospaced ASCII map panes with scan-box overlays, callsign chips, timestamp rows, and diagnostic brackets.

## Colors

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

| Token | Value |
|-------|-------|
| accent | `#C6403A` |
| background | `#08090A` |
| border | `#F7F5EC` |
| error | `#C6403A` |
| info | `#5BC7D6` |
| muted | `#8B918D` |
| primary | `#5BC7D6` |
| secondary | `#F2F0E8` |
| success | `#4C8A68` |
| surface | `#101214` |
| text | `#F7F5EC` |
| warning | `#B7833F` |

## Typography

- **Headline-Lg**: Teko, 1.816rem, weight 700, line-height 1.1.
- **Headline-Md**: Teko, 1.488rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans Condensed, 16px, weight 400, line-height 1.55.
- **Label-Md**: Azeret 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`

### Breakpoints

Mobile <= 640px, tablet 641-960px, desktop >= 961px with CSS grid reassignments and trace lines simplified on mobile.

### Density

High information density is confined to terminal panes and keypad clusters; exterior gutters and the booth silhouette stay spacious to preserve noir quiet.

### Grid

Desktop uses a 12-column max 1360px grid with 16px gutters, a 3-column vertical booth rail, a 6-column route map, and staggered diagnostic strips; tablet collapses to 6 columns; mobile becomes one column with the booth module first.

### Whitespace

Use 4px micro-gaps within logs, 16-24px panel padding, 48px module separations, and 96px black pauses around the main title to pass the 8:1 spacing rhythm.

## Elevation & Depth

### Shadows

- **Lg**: 0 26px 80px rgba(0,0,0,0.62)
- **Md**: 0 0 28px rgba(91,199,214,0.12)
- **Sm**: 0 0 0 1px rgba(247,245,236,0.08)

## Shapes

### Rounded

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

### Surfaces

- **Bg Pattern**: Subtle wet-asphalt vertical reflection stripes plus sparse 1px cyan packet traces behind the content.
- **Card Style**: Rectangular terminal panels using {colors.surface}, {borders.default_width}, square corners, and internal scan boxes.
- **Treatment**: Flat asphalt-black panes with manga-white hairlines, sparse cyan illumination, and no broad gradients.

### Borders

- **Accent Width**: 2px
- **Character**: Near-invisible white borders at low opacity for most panes; cyan only on active route nodes and payphone controls.
- **Default Width**: 1px
- **Style**: solid

## Components

### Composition

Compose as a manga page crossed with a field terminal: one dominant vertical phone-booth module, one wide ASCII route pane, several narrow diagnostic strips, and at least one full-bleed cyan trace that interrupts the grid. Never use three equal cards; create one large quiet black span and one dense telemetry cluster.

### Density

Alternate dense terminal telemetry at 4-8px row gaps with 64-96px empty asphalt pauses so the interface feels like waiting for packets in a quiet street.

### Hierarchy

Display hierarchy comes from compressed booth signage in Teko, small caps callsign chips in mono, and body notes in condensed sans. Cyan identifies live signal and selected affordances only; white linework carries structure; red and amber appear as tiny warning stickers or paper ephemera.

### Signature Patterns

- Coin-slot headers: every major module begins with a narrow horizontal capsule/slot, a tiny return notch, and a cyan status tick aligned to the right edge.
- RF-hop trace overlay: 1px cyan orthogonal and arced lines travel across panel gutters with square packet nodes, callsign labels, and small ACK pulses.
- Sticker-residue panel frames: offset dashed white rectangles, torn red station tabs, and amber inspection labels sit outside the content box as functional metadata.
- APRS ASCII scan panes: monospaced map blocks use dotted grid backgrounds, bracketed scan rectangles, timestamp columns, and callsign chips like JA1YRL-7.

## 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/shibuya-payphone-packet-radio/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 Use cyan only for live signal, active keypad states, packet route traces, and selected callsign chips.
- Do Keep manga panel lines crisp and rectangular; let asymmetric gutters create the emotional frame.
- Do Name real operational states such as coin armed, APRS beacon, digipeater hop, ACK delay, and route loss.
- Do Use kana or station microtype as signage and labels, never as meaningless decoration.
- Do Preserve a dominant black field so the interface feels late-night and existential rather than busy.
- Do Make every sticker, warning tab, or residue frame attach to a panel edge with a data purpose.
- Don't Do not add purple neon, rainbow chrome, vaporwave gradients, or multiple competing accent colors.
- Don't Do not build generic SaaS metric cards, equal dashboards, or rounded glassmorphism panels.
- Don't Do not use blurry grunge overlays that make terminal text or callsigns hard to read.
- Don't Do not scatter anime references as icons; express the reference through panel structure, HUD overlays, and analog-future restraint.
- Don't Do not let cyan fill large backgrounds; it must behave like signal, not wallpaper.
- Don't Do not center everything symmetrically; preserve the booth-column imbalance.

### Accessibility

Maintain high contrast between text and black surfaces, reserve cyan as an additional cue rather than the sole indicator, and keep mono telemetry at 12px or larger with strong line-height.

### Usage Context

Best for fictional radio utilities, urban field tools, midnight navigation systems, cyber-noir editorial interfaces, and maker hardware dashboards with a public-infrastructure story.
shadcn/ui theme
```json
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "shibuya-payphone-packet-radio",
  "type": "registry:theme",
  "title": "Shibuya Payphone Packet Radio shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#08090A",
      "foreground": "#F7F5EC",
      "card": "#101214",
      "card-foreground": "#F7F5EC",
      "popover": "#101214",
      "popover-foreground": "#F7F5EC",
      "primary": "#5BC7D6",
      "primary-foreground": "#ffffff",
      "secondary": "#F2F0E8",
      "secondary-foreground": "#111111",
      "muted": "#8B918D",
      "muted-foreground": "#F7F5EC",
      "accent": "#C6403A",
      "accent-foreground": "#ffffff",
      "destructive": "#C6403A",
      "border": "#F7F5EC",
      "input": "#F7F5EC",
      "ring": "#C6403A",
      "chart-1": "#5BC7D6",
      "chart-2": "#F2F0E8",
      "chart-3": "#C6403A",
      "chart-4": "#4C8A68",
      "chart-5": "#B7833F",
      "sidebar": "#101214",
      "sidebar-foreground": "#F7F5EC",
      "sidebar-primary": "#5BC7D6",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#5BC7D6",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#F7F5EC",
      "sidebar-ring": "#C6403A",
      "radius": "16px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#5BC7D6",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#C6403A",
      "accent-foreground": "#ffffff",
      "destructive": "#C6403A",
      "border": "#303642",
      "input": "#303642",
      "ring": "#C6403A",
      "chart-1": "#5BC7D6",
      "chart-2": "#F2F0E8",
      "chart-3": "#C6403A",
      "chart-4": "#4C8A68",
      "chart-5": "#B7833F",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#5BC7D6",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#C6403A",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#C6403A",
      "radius": "16px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "shibuya-payphone-packet-radio",
    "slug": "shibuya-payphone-packet-radio",
    "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": {
      "borders": [
        "accent_width",
        "character",
        "default_width",
        "style"
      ],
      "colors": [
        "accent",
        "background",
        "border",
        "error",
        "info",
        "muted",
        "primary",
        "secondary",
        "success",
        "surface",
        "text",
        "warning"
      ],
      "motion": [
        "duration",
        "easing",
        "philosophy"
      ],
      "radii": [
        "full",
        "lg",
        "md",
        "none",
        "sm"
      ],
      "shadows": [
        "lg",
        "md",
        "sm"
      ],
      "spacing": [
        "base",
        "scale"
      ],
      "surfaces": [
        "bg_pattern",
        "card_style",
        "treatment"
      ],
      "typography": [
        "base_size",
        "body_font",
        "google_fonts_url",
        "heading_font",
        "letter_spacing",
        "line_height",
        "mono_font",
        "scale_ratio"
      ]
    }
  }
}
```
in the wild

embodiments

the full element showcase
embodiment · shibuya-payphone-packet-radio
DESIGN.md

at a glance

Palette

Typography

headline-lgTeko · 29px · 700

The quick brown fox jumps

headline-mdTeko · 24px · 600

The quick brown fox jumps

body-mdIBM Plex Sans Condensed · 16px · 400

The quick brown fox jumps

label-mdAzeret Mono · 12px · 600

The quick brown fox jumps

Components

New
Card title

Components rendered with this language’s tokens — colors, type, and rounded corners as specified.

Spacing

  • base8px
  • xs4px
  • sm8px
  • md12px
  • lg16px
  • xl24px
  • 2xl32px
  • 3xl48px
  • 4xl64px
  • step-896px

Shape

full9999px
lg24px
md16px
none0px
sm0px
shadcn/ui

implementation kit

needs agent-authored kitcompatibility fallback
shadcn compatibility only
The generated theme variables are available, but the polished shadcn component recipes and shots have not been authored by the Katagami agent yet.
fallbackprimitives render
Compatibility proof
Local shadcn-style primitives accept the generated theme variables.
primaryaccentsurfacemutedwarning
table rhythm
buttonok
cardok
inputok
recommendedcompatibility fallback

DESIGN.md with shadcn

Copy this when the target app uses shadcn/ui. It packages the Katagami DESIGN.md context with the install list, theme variables, component recipes, preview-shot contract, and starter TSX in one Markdown companion.

advanced implementation filesoptional machine-readable theme, CSS, TSX starter, recipes, and preview contract
shadcn add
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table
theme css
:root {
  --background: #08090A;
  --foreground: #F7F5EC;
  --card: #101214;
  --card-foreground: #F7F5EC;
  --popover: #101214;
  --popover-foreground: #F7F5EC;
  --primary: #5BC7D6;
  --primary-foreground: #ffffff;
  --secondary: #F2F0E8;
  --secondary-foreground: #111111;
  --muted: #8B918D;
  --muted-foreground: #F7F5EC;
  --accent: #C6403A;
  --accent-foreground: #ffffff;
  --destructive: #C6403A;
  --border: #F7F5EC;
  --input: #F7F5EC;
  --ring: #C6403A;
  --chart-1: #5BC7D6;
  --chart-2: #F2F0E8;
  --chart-3: #C6403A;
  --chart-4: #4C8A68;
  --chart-5: #B7833F;
  --sidebar: #101214;
  --sidebar-foreground: #F7F5EC;
  --sidebar-primary: #5BC7D6;
  --sidebar-primary-foreground: #ffffff;
  --sidebar-accent: #5BC7D6;
  --sidebar-accent-foreground: #ffffff;
  --sidebar-border: #F7F5EC;
  --sidebar-ring: #C6403A;
  --radius: 16px;
}

.dark {
  --background: #0f1115;
  --foreground: #f8fafc;
  --card: #181b22;
  --card-foreground: #f8fafc;
  --popover: #181b22;
  --popover-foreground: #f8fafc;
  --primary: #5BC7D6;
  --primary-foreground: #ffffff;
  --secondary: #252a33;
  --secondary-foreground: #f8fafc;
  --muted: #252a33;
  --muted-foreground: #a1a1aa;
  --accent: #C6403A;
  --accent-foreground: #ffffff;
  --destructive: #C6403A;
  --border: #303642;
  --input: #303642;
  --ring: #C6403A;
  --chart-1: #5BC7D6;
  --chart-2: #F2F0E8;
  --chart-3: #C6403A;
  --chart-4: #4C8A68;
  --chart-5: #B7833F;
  --sidebar: #181b22;
  --sidebar-foreground: #f8fafc;
  --sidebar-primary: #5BC7D6;
  --sidebar-primary-foreground: #ffffff;
  --sidebar-accent: #C6403A;
  --sidebar-accent-foreground: #ffffff;
  --sidebar-border: #303642;
  --sidebar-ring: #C6403A;
  --radius: 16px;
}
tsx starter
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
  Card,
  CardContent,
  CardDescription,
  CardFooter,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";

export function ShibuyaPayphonePacketRadioShadcnKit() {
  return (
    <section className="grid gap-4 rounded-[var(--radius)] border bg-background p-4 text-foreground">
      <div className="flex items-start justify-between gap-4">
        <div>
          <Badge variant="outline">shadcn/ui</Badge>
          <h2 className="mt-3 text-2xl font-semibold tracking-tight">Shibuya Payphone Packet Radio</h2>
          <p className="mt-1 max-w-xl text-sm text-muted-foreground">
            Use the Katagami registry theme, then compose these shadcn primitives
            with the language-specific component recipes.
          </p>
        </div>
        <Button>Apply theme</Button>
      </div>

      <Tabs defaultValue="components">
        <TabsList>
          <TabsTrigger value="components">Components</TabsTrigger>
          <TabsTrigger value="states">States</TabsTrigger>
          <TabsTrigger value="export">Export</TabsTrigger>
        </TabsList>
      </Tabs>

      <Card>
        <CardHeader>
          <CardTitle>Component recipe</CardTitle>
          <CardDescription>
            Replace this starter content with the agent-authored product scene
            from components.md and preview-shots.json.
          </CardDescription>
        </CardHeader>
        <CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
          <Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
          <Button variant="secondary">Preview state</Button>
        </CardContent>
        <CardFooter className="justify-between">
          <Badge>Ready</Badge>
          <Button variant="outline">Copy recipe</Button>
        </CardFooter>
      </Card>
    </section>
  );
}
theme JSONcompatibility fallback
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "shibuya-payphone-packet-radio",
  "type": "registry:theme",
  "title": "Shibuya Payphone Packet Radio shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#08090A",
      "foreground": "#F7F5EC",
      "card": "#101214",
      "card-foreground": "#F7F5EC",
      "popover": "#101214",
      "popover-foreground": "#F7F5EC",
      "primary": "#5BC7D6",
      "primary-foreground": "#ffffff",
      "secondary": "#F2F0E8",
      "secondary-foreground": "#111111",
      "muted": "#8B918D",
      "muted-foreground": "#F7F5EC",
      "accent": "#C6403A",
      "accent-foreground": "#ffffff",
      "destructive": "#C6403A",
      "border": "#F7F5EC",
      "input": "#F7F5EC",
      "ring": "#C6403A",
      "chart-1": "#5BC7D6",
      "chart-2": "#F2F0E8",
      "chart-3": "#C6403A",
      "chart-4": "#4C8A68",
      "chart-5": "#B7833F",
      "sidebar": "#101214",
      "sidebar-foreground": "#F7F5EC",
      "sidebar-primary": "#5BC7D6",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#5BC7D6",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#F7F5EC",
      "sidebar-ring": "#C6403A",
      "radius": "16px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#5BC7D6",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#C6403A",
      "accent-foreground": "#ffffff",
      "destructive": "#C6403A",
      "border": "#303642",
      "input": "#303642",
      "ring": "#C6403A",
      "chart-1": "#5BC7D6",
      "chart-2": "#F2F0E8",
      "chart-3": "#C6403A",
      "chart-4": "#4C8A68",
      "chart-5": "#B7833F",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#5BC7D6",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#C6403A",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#C6403A",
      "radius": "16px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "shibuya-payphone-packet-radio",
    "slug": "shibuya-payphone-packet-radio",
    "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": {
      "borders": [
        "accent_width",
        "character",
        "default_width",
        "style"
      ],
      "colors": [
        "accent",
        "background",
        "border",
        "error",
        "info",
        "muted",
        "primary",
        "secondary",
        "success",
        "surface",
        "text",
        "warning"
      ],
      "motion": [
        "duration",
        "easing",
        "philosophy"
      ],
      "radii": [
        "full",
        "lg",
        "md",
        "none",
        "sm"
      ],
      "shadows": [
        "lg",
        "md",
        "sm"
      ],
      "spacing": [
        "base",
        "scale"
      ],
      "surfaces": [
        "bg_pattern",
        "card_style",
        "treatment"
      ],
      "typography": [
        "base_size",
        "body_font",
        "google_fonts_url",
        "heading_font",
        "letter_spacing",
        "line_height",
        "mono_font",
        "scale_ratio"
      ]
    }
  }
}
component recipescompatibility fallback
# Shibuya Payphone Packet Radio shadcn/ui Components

Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `shibuya-payphone-packet-radio`
Slug: `shibuya-payphone-packet-radio`

## Intent

A clean cyber-noir interface language for late-night signal hunting from a rain-streaked Shibuya public phone: black asphalt fields, manga-white panel cuts, and one restrained cyan packet current moving through coin slots, keypad grids, APRS callsigns, and ASCII map panes.

## Required primitives

- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table

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

## Token cues

Colors:

{
  "accent": "#C6403A",
  "background": "#08090A",
  "border": "#F7F5EC",
  "error": "#C6403A",
  "info": "#5BC7D6",
  "muted": "#8B918D",
  "primary": "#5BC7D6",
  "secondary": "#F2F0E8",
  "success": "#4C8A68",
  "surface": "#101214",
  "text": "#F7F5EC",
  "warning": "#B7833F"
}

Typography:

{
  "base_size": "16px",
  "body_font": "IBM Plex Sans Condensed",
  "google_fonts_url": "https://fonts.googleapis.com/css2?family=Azeret+Mono:wght@400;500;700&family=IBM+Plex+Sans+Condensed:wght@400;500;600;700&family=Teko:wght@500;600;700&display=swap",
  "heading_font": "Teko",
  "letter_spacing": "-0.02em",
  "line_height": 1.55,
  "mono_font": "Azeret Mono",
  "scale_ratio": 1.22
}

## Visual character to preserve

- Use a black-and-white manga panel grid with 2px white borders, thick asymmetric gutters, and one oversized full-height phone-booth column breaking the main layout.
- Route content with thin neon-cyan SVG or CSS trace lines that cross panel gutters, terminate in small square packet nodes, and never become broad gradients.
- Build controls from coin-return slots and payphone keypad geometry: rectangular black keys, white hairline outlines, cyan active states, and compressed numeric labels.
- Layer sticker-residue frames as offset dashed white rectangles and tiny red or amber paper tabs around panels while keeping the interior surfaces flat black.
- Render APRS/TUI information in monospaced ASCII map panes with scan-box overlays, callsign chips, timestamp rows, and diagnostic brackets.

## ShadSync visual profile

{
  "family": "paper-collage",
  "material": "paper",
  "contour": "default",
  "border": "dashed",
  "underlay": true,
  "grain": true,
  "stickerBadges": true,
  "motion": "lift",
  "density": "balanced",
  "accents": [
    "primary",
    "accent",
    "secondary",
    "muted"
  ]
}

## Signature component recipes

### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.

### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.

### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.

### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.

### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.

## Preview shots

- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.

## Implementation contract

- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/shibuya-payphone-packet-radio/registry-theme.json` variables, then use these recipes for composition and state design.
- Preserve Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: Use cyan only for live signal, active keypad states, packet route traces, and selected callsign chips.; Keep manga panel lines crisp and rectangular; let asymmetric gutters create the emotional frame.; Name real operational states such as coin armed, APRS beacon, digipeater hop, ACK delay, and route loss.; Use kana or station microtype as signage and labels, never as meaningless decoration.; Preserve a dominant black field so the interface feels late-night and existential rather than busy.; Make every sticker, warning tab, or residue frame attach to a panel edge with a data purpose.
- Do not: Do not add purple neon, rainbow chrome, vaporwave gradients, or multiple competing accent colors.; Do not build generic SaaS metric cards, equal dashboards, or rounded glassmorphism panels.; Do not use blurry grunge overlays that make terminal text or callsigns hard to read.; Do not scatter anime references as icons; express the reference through panel structure, HUD overlays, and analog-future restraint.; Do not let cyan fill large backgrounds; it must behave like signal, not wallpaper.; Do not center everything symmetrically; preserve the booth-column imbalance.

## Copy-paste component example

This generated starter proves the import shape. Production Katagami agents should replace it with a language-specific product composition.

```tsx
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
  Card,
  CardContent,
  CardDescription,
  CardFooter,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";

export function ShibuyaPayphonePacketRadioShadcnKit() {
  return (
    <section className="grid gap-4 rounded-[var(--radius)] border bg-background p-4 text-foreground">
      <div className="flex items-start justify-between gap-4">
        <div>
          <Badge variant="outline">shadcn/ui</Badge>
          <h2 className="mt-3 text-2xl font-semibold tracking-tight">Shibuya Payphone Packet Radio</h2>
          <p className="mt-1 max-w-xl text-sm text-muted-foreground">
            Use the Katagami registry theme, then compose these shadcn primitives
            with the language-specific component recipes.
          </p>
        </div>
        <Button>Apply theme</Button>
      </div>

      <Tabs defaultValue="components">
        <TabsList>
          <TabsTrigger value="components">Components</TabsTrigger>
          <TabsTrigger value="states">States</TabsTrigger>
          <TabsTrigger value="export">Export</TabsTrigger>
        </TabsList>
      </Tabs>

      <Card>
        <CardHeader>
          <CardTitle>Component recipe</CardTitle>
          <CardDescription>
            Replace this starter content with the agent-authored product scene
            from components.md and preview-shots.json.
          </CardDescription>
        </CardHeader>
        <CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
          <Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
          <Button variant="secondary">Preview state</Button>
        </CardContent>
        <CardFooter className="justify-between">
          <Badge>Ready</Badge>
          <Button variant="outline">Copy recipe</Button>
        </CardFooter>
      </Card>
    </section>
  );
}
```

## Layout notes

{
  "breakpoints": "Mobile <= 640px, tablet 641-960px, desktop >= 961px with CSS grid reassignments and trace lines simplified on mobile.",
  "density": "High information density is confined to terminal panes and keypad clusters; exterior gutters and the booth silhouette stay spacious to preserve noir quiet.",
  "grid": "Desktop uses a 12-column max 1360px grid with 16px gutters, a 3-column vertical booth rail, a 6-column route map, and staggered diagnostic strips; tablet collapses to 6 columns; mobile becomes one column with the booth module first.",
  "whitespace": "Use 4px micro-gaps within logs, 16-24px panel padding, 48px module separations, and 96px black pauses around the main title to pass the 8:1 spacing rhythm."
}
preview shotscompatibility fallback
{
  "artifact": "katagami:shadcn-preview-shots",
  "version": "preview-shots-v1",
  "generator": "katagami-ui-compatibility-projection",
  "generatedBy": "katagami-ui-projection",
  "requiresVisualProfile": true,
  "schema": "katagami:shadcn-preview-shots/renderable-v1",
  "renderable": true,
  "language": {
    "id": "shibuya-payphone-packet-radio",
    "name": "Shibuya Payphone Packet Radio",
    "slug": "shibuya-payphone-packet-radio"
  },
  "installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
  "primitives": [
    "button",
    "card",
    "input",
    "textarea",
    "select",
    "dialog",
    "sheet",
    "tabs",
    "badge",
    "separator",
    "checkbox",
    "switch",
    "slider",
    "tooltip",
    "dropdown-menu",
    "table"
  ],
  "identityNotes": [
    "Use a black-and-white manga panel grid with 2px white borders, thick asymmetric gutters, and one oversized full-height phone-booth column breaking the main layout.",
    "Route content with thin neon-cyan SVG or CSS trace lines that cross panel gutters, terminate in small square packet nodes, and never become broad gradients.",
    "Build controls from coin-return slots and payphone keypad geometry: rectangular black keys, white hairline outlines, cyan active states, and compressed numeric labels.",
    "Layer sticker-residue frames as offset dashed white rectangles and tiny red or amber paper tabs around panels while keeping the interior surfaces flat black.",
    "Render APRS/TUI information in monospaced ASCII map panes with scan-box overlays, callsign chips, timestamp rows, and diagnostic brackets."
  ],
  "visualProfile": {
    "family": "paper-collage",
    "material": "paper",
    "contour": "default",
    "border": "dashed",
    "underlay": true,
    "grain": true,
    "stickerBadges": true,
    "motion": "lift",
    "density": "balanced",
    "accents": [
      "primary",
      "accent",
      "secondary",
      "muted"
    ]
  },
  "shots": [
    {
      "id": "application-shell",
      "title": "Application shell",
      "viewport": "desktop",
      "primitives": [
        "button",
        "card",
        "input",
        "select",
        "tabs",
        "badge",
        "separator",
        "table"
      ],
      "composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
      "mustShow": [
        "primary and secondary actions",
        "card hierarchy",
        "filterable state",
        "table or list density"
      ],
      "avoid": [
        "component inventory walls",
        "placeholder-only content",
        "generic rounded SaaS chrome"
      ],
      "scene": {
        "eyebrow": "workspace spread",
        "headline": "Shibuya Payphone Packet Radio launch room",
        "description": "A product team workspace where navigation, filters, metrics, and dense rows carry the language's visible structure.",
        "primaryAction": "Apply theme",
        "secondaryAction": "Review states",
        "stats": [
          {
            "label": "components",
            "value": "16",
            "tone": "accent"
          },
          {
            "label": "states",
            "value": "ready"
          },
          {
            "label": "density",
            "value": "balanced",
            "tone": "warning"
          }
        ],
        "rows": [
          {
            "label": "Primary flow",
            "value": "mapped",
            "status": "active"
          },
          {
            "label": "Token coverage",
            "value": "semantic",
            "status": "synced"
          },
          {
            "label": "Responsive proof",
            "value": "queued",
            "status": "review"
          }
        ],
        "statuses": [
          "Active",
          "Synced",
          "Draft"
        ]
      }
    },
    {
      "id": "detail-editor",
      "title": "Detail editor",
      "viewport": "tablet",
      "primitives": [
        "button",
        "card",
        "input",
        "textarea",
        "select",
        "checkbox",
        "switch",
        "slider",
        "dialog",
        "sheet"
      ],
      "composition": "A focused editing flow with form fields, validation, confirmation, and a contextual side panel.",
      "mustShow": [
        "focus ring",
        "error or destructive state",
        "dialog or sheet treatment",
        "written guidance content"
      ],
      "avoid": [
        "unstyled browser controls",
        "floating cards inside cards",
        "missing labels"
      ],
      "scene": {
        "eyebrow": "editing flow",
        "headline": "Language recipe editor",
        "description": "A focused form proving labels, validation, toggles, panel rhythm, and action hierarchy.",
        "primaryAction": "Save recipe",
        "secondaryAction": "Open sheet",
        "fields": [
          {
            "label": "Component family",
            "value": "Narrative cards"
          },
          {
            "label": "State treatment",
            "value": "Visible focus + validation"
          },
          {
            "label": "Motion",
            "value": "Small lift, no opacity-only fade"
          }
        ],
        "statuses": [
          "Focus",
          "Invalid",
          "Confirmed"
        ]
      }
    },
    {
      "id": "data-operations",
      "title": "Data operations",
      "viewport": "mobile",
      "primitives": [
        "button",
        "tabs",
        "badge",
        "dropdown-menu",
        "table",
        "tooltip",
        "separator"
      ],
      "composition": "A compact operational view proving row rhythm, stacked actions, menu states, badges, and empty/destructive states.",
      "mustShow": [
        "responsive reflow",
        "dense row styling",
        "menu affordance",
        "status badge system"
      ],
      "avoid": [
        "desktop-only tables",
        "text overflow",
        "default shadcn spacing without Katagami character"
      ],
      "scene": {
        "eyebrow": "operations",
        "headline": "Compact review queue",
        "description": "A narrow viewport scene with rows, menus, tooltips, badges, and destructive affordances.",
        "primaryAction": "Resolve",
        "secondaryAction": "Filter",
        "rows": [
          {
            "label": "Button hierarchy",
            "value": "approved",
            "status": "ok"
          },
          {
            "label": "Table rhythm",
            "value": "needs pass",
            "status": "watch"
          },
          {
            "label": "Empty state",
            "value": "designed",
            "status": "done"
          }
        ],
        "statuses": [
          "Queued",
          "Blocked",
          "Done"
        ]
      }
    }
  ],
  "componentRecipes": [
    {
      "primitive": "button",
      "intent": "Prove action hierarchy, focus, disabled, and destructive states."
    },
    {
      "primitive": "card",
      "intent": "Carry the language surface, border, elevation, and density rules."
    },
    {
      "primitive": "input",
      "intent": "Show labels, focus rings, validation, and spacing rhythm."
    },
    {
      "primitive": "textarea",
      "intent": "Show longer guidance, validation copy, and writing density."
    },
    {
      "primitive": "select",
      "intent": "Show filtering, selection contrast, and menu trigger styling."
    },
    {
      "primitive": "dialog",
      "intent": "Show centered decision states and overlay treatment."
    },
    {
      "primitive": "sheet",
      "intent": "Show contextual side panels and responsive editing."
    },
    {
      "primitive": "tabs",
      "intent": "Show navigational structure and active/inactive contrast."
    },
    {
      "primitive": "badge",
      "intent": "Show compact status vocabulary and semantic colors."
    },
    {
      "primitive": "separator",
      "intent": "Show section rhythm without generic gray dividers."
    },
    {
      "primitive": "checkbox",
      "intent": "Show binary selection with visible focus and checked states."
    },
    {
      "primitive": "switch",
      "intent": "Show settings toggles and on/off contrast."
    },
    {
      "primitive": "slider",
      "intent": "Show numeric adjustment with track/thumb styling."
    },
    {
      "primitive": "tooltip",
      "intent": "Show concise explanation styling above compact controls."
    },
    {
      "primitive": "dropdown-menu",
      "intent": "Show action menus, destructive items, and grouped choices."
    },
    {
      "primitive": "table",
      "intent": "Show dense operational data, separators, row states, and responsive behavior."
    }
  ],
  "qualityRules": {
    "do": [
      "Use cyan only for live signal, active keypad states, packet route traces, and selected callsign chips.",
      "Keep manga panel lines crisp and rectangular; let asymmetric gutters create the emotional frame.",
      "Name real operational states such as coin armed, APRS beacon, digipeater hop, ACK delay, and route loss.",
      "Use kana or station microtype as signage and labels, never as meaningless decoration.",
      "Preserve a dominant black field so the interface feels late-night and existential rather than busy.",
      "Make every sticker, warning tab, or residue frame attach to a panel edge with a data purpose."
    ],
    "dont": [
      "Do not add purple neon, rainbow chrome, vaporwave gradients, or multiple competing accent colors.",
      "Do not build generic SaaS metric cards, equal dashboards, or rounded glassmorphism panels.",
      "Do not use blurry grunge overlays that make terminal text or callsigns hard to read.",
      "Do not scatter anime references as icons; express the reference through panel structure, HUD overlays, and analog-future restraint.",
      "Do not let cyan fill large backgrounds; it must behave like signal, not wallpaper.",
      "Do not center everything symmetrically; preserve the booth-column imbalance."
    ]
  }
}
related

More like this