Typography
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.
Portable DESIGN.md source of truth for most agents and apps.
Compose on a horizontal tideline grid: a single luminous waterline crosses each section with lit strike dots marking where the section's drop landed; content blooms above and below it. The one focal element is the strike-point at full ink; supporting forms diffuse outward and lighten with distance.
Radial distance from the strike encodes importance, reinforced by ink density — lit surface #eef2f1 for the focus washing to ink-pale #56676b for the receding. The single vermillion #e2402c seal is the one live action per view; cyan glow #7fd4d0 is the waterline/focus light.
Low-to-medium. Three or four breathing groups per screen separated by tidal space and wet bleed-dividers, never hard rules. Airy 15-16px table rows.
Diffusion-ring data (arcs blooming from a bright core), a continuous luminous waterline with strike dots, wash panels with a corner bloom and no edge accent, a vertical depth gauge, wet bleed-dividers, and the lone vermillion seal.
Horizontal tideline grid; max content 1200px centred; only the hero spans 100vw. minmax(0,1fr) columns so children shrink, never overflow.
Generous tidal section gaps 56-120px; pad above every title; void carries weight as the direction ink is travelling.
low-to-medium
Single column below ~880px; rail nav collapses to a top row; rings and tables go full-width; never overflow horizontally from 390px to 2560px+.
inkpool
Inkpool wet ink-wash technique applied to luminous blooms dispersing in deep dark water; the tonal world is inverted from cream-ground to wet-slate so the wash reads as light rising through the pool.
One full-bleed hero of a luminous bloom against vast dark water with a vermillion seal low in a corner; feature imagery as mid-scale blooms; empty-states as a faint diluted suggestion in mist.
# Tidemark ## Philosophy Tidemark reads a screen as a deep, still pool seen from below the surface. A single drop lands; what matters is dense and near the strike, and everything else diffuses outward into the dark water until it dissolves to a pale wash. Hierarchy is radial distance from the strike, not stacked weight or coloured chrome. The mode is dark on purpose — a wet-slate ground where pale wash and a lone vermillion seal read as light rising through water. The name is the line the receding water leaves behind. ### Values - Radial hierarchy — importance is distance from the strike-point, not size or stacking order - The void is direction — dark space is where the ink is going, not empty filler - Impermanence — notes do not delete; they sink a band deeper and fade to wash - One waterline — a single luminous hairline gives the whole system its rhythm - One seal — a single vermillion accent per view for the one live action ### Anti-Values - Never a light cream or white ground — the pool is deep wet-slate - Never a second vermillion or saturated colour competing in a view - Never bars or pie wedges — magnitude blooms as a diffusion ring - Never a calligraphic serif masthead — the type is structural, like a tide table - Never a hard mechanical border or a boxed-in pill nav ### Visual Character - background:#0d1417 deep wet-slate pool with cool cyan/vermillion ink-diffusion radial fields - one luminous waterline hairline (#7fd4d0) threading every section with lit strike dots - diffusion-ring data: SVG arcs blooming from a bright core, never bars - wash panels: top-down dark gradient surface with one corner cyan bloom, no edge accent - cool deep-water shadows only; long tidal easing cubic-bezier(.22,.61,.36,1) 820ms ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#0d1417` | | surface | `#141d22` | | surface_2 | `#1b262c` | | text | `#eef2f1` | | text_2 | `#b9c4c5` | | muted | `#7e8c8e` | | ink_pale | `#56676b` | | accent | `#e2402c` | | accent_strong | `#c2331f` | | on_accent | `#fbf3ee` | | glow | `#7fd4d0` | | glow_deep | `#3f8f8c` | | border | `rgba(180,200,202,0.12)` | | success | `#6fae8f` | | warning | `#d6a253` | | error | `#e2402c` | | info | `#6fa6c4` | ### Typography - **Base Size**: 17.5px - **Body Font**: Inter - **Heading Font**: Space Grotesk - **Mono Font**: Space Mono - **Heading Weight**: 600 - **Heading Transform**: none - **Letter Spacing**: -0.02em - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&family=Space+Mono:wght@400;700&display=swap ### Radii - **None**: 0px - **Control**: 16px - **Panel**: 24px - **Full**: 9999px ### Shadows - **Sm**: 0 2px 12px rgba(0,0,0,0.40) - **Md**: 0 10px 36px rgba(0,0,0,0.46) - **Lg**: 0 22px 64px rgba(0,0,0,0.55) - **Glow**: 0 0 28px rgba(127,212,208,0.28) ### Spacing - **Base**: 8px - **Scale**: ["8px","16px","24px","32px","48px","64px","96px","120px"] ### Surfaces - **Pool**: #0d1417 - **Panel**: linear-gradient(180deg,#141d22,#1b262c) - **Overlay**: rgba(13,20,23,0.82) - **Bloom**: radial-gradient(circle,rgba(127,212,208,0.12),transparent 68%) ### Borders - **Soft**: 1px solid rgba(180,200,202,0.12) - **Hairline**: 1px solid rgba(180,200,202,0.07) ### Motion - **Ease**: cubic-bezier(0.22,0.61,0.36,1) - **Normal**: 480ms - **Slow**: 820ms - **Reduced Motion**: honored ## Rules ### Composition Compose on a horizontal tideline grid: a single luminous waterline crosses each section with lit strike dots marking where the section's drop landed; content blooms above and below it. The one focal element is the strike-point at full ink; supporting forms diffuse outward and lighten with distance. ### Hierarchy Radial distance from the strike encodes importance, reinforced by ink density — lit surface #eef2f1 for the focus washing to ink-pale #56676b for the receding. The single vermillion #e2402c seal is the one live action per view; cyan glow #7fd4d0 is the waterline/focus light. ### Density Low-to-medium. Three or four breathing groups per screen separated by tidal space and wet bleed-dividers, never hard rules. Airy 15-16px table rows. ### Signature Diffusion-ring data (arcs blooming from a bright core), a continuous luminous waterline with strike dots, wash panels with a corner bloom and no edge accent, a vertical depth gauge, wet bleed-dividers, and the lone vermillion seal. ## Layout ### Grid Horizontal tideline grid; max content 1200px centred; only the hero spans 100vw. minmax(0,1fr) columns so children shrink, never overflow. ### Whitespace Generous tidal section gaps 56-120px; pad above every title; void carries weight as the direction ink is travelling. ### Density low-to-medium ### Responsive Single column below ~880px; rail nav collapses to a top row; rings and tables go full-width; never overflow horizontally from 390px to 2560px+. ### Breakpoints - **Mobile**: 390px - **Tablet**: 880px - **Desktop**: 1200px - **Wide**: 2560px ## Guidance ### Do - Place exactly one strike-point at full ink per view and diffuse everything else outward into the dark - Thread one luminous waterline through the sections and ride lit strike dots on it - Show magnitude as a diffusion ring arc blooming from a bright core, never a bar - Reserve the vermillion seal for the single live action; use cyan glow for waterline and focus - Keep the deep wet-slate ground and cool deep-water shadows; let panels bloom from one corner ### Don't - Don't use a light cream/white ground, a second vermillion, or saturated colour beyond the one seal - Don't draw bars or pie wedges for data, or give any card a single highlighted edge - Don't trap navigation in a boxed pill bar or nest cards - Don't use a calligraphic serif masthead, warm/blue-grey chrome shadows, or symbol glyphs in copy ### Accessibility Lit surface #eef2f1 on Pool #0d1417 is ~15:1. Cyan glow and vermillion are used for accent and large/structural type, not small body text. Muted #7e8c8e only for 14.5px+ labels. Focus rings use the cyan glow; every form control is explicitly styled. The settled page is the no-JS default behind a .js gate; prefers-reduced-motion collapses all motion. ## Imagery Direction ### Pairs With inkpool ### Summary Inkpool wet ink-wash technique applied to luminous blooms dispersing in deep dark water; the tonal world is inverted from cream-ground to wet-slate so the wash reads as light rising through the pool. ### Subjects - a single ink drop blooming in a deep still pool - dispersing tendrils and water-blooms in dark water - a tidemark line left by receding water - faint diffusing forms drifting in the void ### Usage One full-bleed hero of a luminous bloom against vast dark water with a vermillion seal low in a corner; feature imagery as mid-scale blooms; empty-states as a faint diluted suggestion in mist.
---
version: "alpha"
name: "Tidemark"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#0d1417"
surface: "#141d22"
surface_2: "#1b262c"
text: "#eef2f1"
text_2: "#b9c4c5"
muted: "#7e8c8e"
ink_pale: "#56676b"
accent: "#e2402c"
accent_strong: "#c2331f"
on_accent: "#fbf3ee"
glow: "#7fd4d0"
glow_deep: "#3f8f8c"
success: "#6fae8f"
warning: "#d6a253"
error: "#e2402c"
info: "#6fa6c4"
typography:
headline-lg:
fontFamily: "Space Grotesk"
fontSize: "2.136rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Space Grotesk"
fontSize: "1.709rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Inter"
fontSize: "17.5px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "Space Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
control: "16px"
panel: "24px"
full: "9999px"
spacing:
base: "8px"
xs: "8px"
sm: "16px"
md: "24px"
lg: "32px"
xl: "48px"
2xl: "64px"
3xl: "96px"
4xl: "120px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_2:
backgroundColor: "{colors.surface_2}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-text_2:
backgroundColor: "{colors.text_2}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-ink_pale:
backgroundColor: "{colors.ink_pale}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_strong:
backgroundColor: "{colors.accent_strong}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-glow:
backgroundColor: "{colors.glow}"
color-reference-glow_deep:
backgroundColor: "{colors.glow_deep}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#000000"
typography: "{typography.label-md}"
rounded: "{rounded.none}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.none}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.none}"
height: "44px"
---
# Tidemark
## Overview
Tidemark reads a screen as a deep, still pool seen from below the surface. A single drop lands; what matters is dense and near the strike, and everything else diffuses outward into the dark water until it dissolves to a pale wash. Hierarchy is radial distance from the strike, not stacked weight or coloured chrome. The mode is dark on purpose — a wet-slate ground where pale wash and a lone vermillion seal read as light rising through water. The name is the line the receding water leaves behind.
### Values
- Radial hierarchy — importance is distance from the strike-point, not size or stacking order
- The void is direction — dark space is where the ink is going, not empty filler
- Impermanence — notes do not delete; they sink a band deeper and fade to wash
- One waterline — a single luminous hairline gives the whole system its rhythm
- One seal — a single vermillion accent per view for the one live action
### Anti-Values
- Never a light cream or white ground — the pool is deep wet-slate
- Never a second vermillion or saturated colour competing in a view
- Never bars or pie wedges — magnitude blooms as a diffusion ring
- Never a calligraphic serif masthead — the type is structural, like a tide table
- Never a hard mechanical border or a boxed-in pill nav
### Visual Character
- background:#0d1417 deep wet-slate pool with cool cyan/vermillion ink-diffusion radial fields
- one luminous waterline hairline (#7fd4d0) threading every section with lit strike dots
- diffusion-ring data: SVG arcs blooming from a bright core, never bars
- wash panels: top-down dark gradient surface with one corner cyan bloom, no edge accent
- cool deep-water shadows only; long tidal easing cubic-bezier(.22,.61,.36,1) 820ms
## 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 | `#0d1417` |
| surface | `#141d22` |
| surface_2 | `#1b262c` |
| text | `#eef2f1` |
| text_2 | `#b9c4c5` |
| muted | `#7e8c8e` |
| ink_pale | `#56676b` |
| accent | `#e2402c` |
| accent_strong | `#c2331f` |
| on_accent | `#fbf3ee` |
| glow | `#7fd4d0` |
| glow_deep | `#3f8f8c` |
| success | `#6fae8f` |
| warning | `#d6a253` |
| error | `#e2402c` |
| info | `#6fa6c4` |
## Typography
- **Headline-Lg**: Space Grotesk, 2.136rem, weight 700, line-height 1.1.
- **Headline-Md**: Space Grotesk, 1.709rem, weight 600, line-height 1.15.
- **Body-Md**: Inter, 17.5px, weight 400, line-height 1.5.
- **Label-Md**: Space Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `8px`
- **Sm**: `16px`
- **Md**: `24px`
- **Lg**: `32px`
- **Xl**: `48px`
- **2xl**: `64px`
- **3xl**: `96px`
- **4xl**: `120px`
### Grid
Horizontal tideline grid; max content 1200px centred; only the hero spans 100vw. minmax(0,1fr) columns so children shrink, never overflow.
### Whitespace
Generous tidal section gaps 56-120px; pad above every title; void carries weight as the direction ink is travelling.
### Density
low-to-medium
### Responsive
Single column below ~880px; rail nav collapses to a top row; rings and tables go full-width; never overflow horizontally from 390px to 2560px+.
### Breakpoints
- **Mobile**: 390px
- **Tablet**: 880px
- **Desktop**: 1200px
- **Wide**: 2560px
## Elevation & Depth
### Shadows
- **Sm**: 0 2px 12px rgba(0,0,0,0.40)
- **Md**: 0 10px 36px rgba(0,0,0,0.46)
- **Lg**: 0 22px 64px rgba(0,0,0,0.55)
- **Glow**: 0 0 28px rgba(127,212,208,0.28)
## Shapes
### Rounded
- **None**: `0px`
- **Control**: `16px`
- **Panel**: `24px`
- **Full**: `9999px`
### Surfaces
- **Pool**: #0d1417
- **Panel**: linear-gradient(180deg,#141d22,#1b262c)
- **Overlay**: rgba(13,20,23,0.82)
- **Bloom**: radial-gradient(circle,rgba(127,212,208,0.12),transparent 68%)
### Borders
- **Soft**: 1px solid rgba(180,200,202,0.12)
- **Hairline**: 1px solid rgba(180,200,202,0.07)
## Components
### Composition
Compose on a horizontal tideline grid: a single luminous waterline crosses each section with lit strike dots marking where the section's drop landed; content blooms above and below it. The one focal element is the strike-point at full ink; supporting forms diffuse outward and lighten with distance.
### Hierarchy
Radial distance from the strike encodes importance, reinforced by ink density — lit surface #eef2f1 for the focus washing to ink-pale #56676b for the receding. The single vermillion #e2402c seal is the one live action per view; cyan glow #7fd4d0 is the waterline/focus light.
### Density
Low-to-medium. Three or four breathing groups per screen separated by tidal space and wet bleed-dividers, never hard rules. Airy 15-16px table rows.
### Signature
Diffusion-ring data (arcs blooming from a bright core), a continuous luminous waterline with strike dots, wash panels with a corner bloom and no edge accent, a vertical depth gauge, wet bleed-dividers, and the lone vermillion seal.
## 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-019efa12-1e32-7332-a30b-a5b31811f429/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 Place exactly one strike-point at full ink per view and diffuse everything else outward into the dark
- Do Thread one luminous waterline through the sections and ride lit strike dots on it
- Do Show magnitude as a diffusion ring arc blooming from a bright core, never a bar
- Do Reserve the vermillion seal for the single live action; use cyan glow for waterline and focus
- Do Keep the deep wet-slate ground and cool deep-water shadows; let panels bloom from one corner
- Don't Don't use a light cream/white ground, a second vermillion, or saturated colour beyond the one seal
- Don't Don't draw bars or pie wedges for data, or give any card a single highlighted edge
- Don't Don't trap navigation in a boxed pill bar or nest cards
- Don't Don't use a calligraphic serif masthead, warm/blue-grey chrome shadows, or symbol glyphs in copy
### Accessibility
Lit surface #eef2f1 on Pool #0d1417 is ~15:1. Cyan glow and vermillion are used for accent and large/structural type, not small body text. Muted #7e8c8e only for 14.5px+ labels. Focus rings use the cyan glow; every form control is explicitly styled. The settled page is the no-JS default behind a .js gate; prefers-reduced-motion collapses all motion.
## Imagery Direction
### Pairs With
inkpool
### Summary
Inkpool wet ink-wash technique applied to luminous blooms dispersing in deep dark water; the tonal world is inverted from cream-ground to wet-slate so the wash reads as light rising through the pool.
### Subjects
- a single ink drop blooming in a deep still pool
- dispersing tendrils and water-blooms in dark water
- a tidemark line left by receding water
- faint diffusing forms drifting in the void
### Usage
One full-bleed hero of a luminous bloom against vast dark water with a vermillion seal low in a corner; feature imagery as mid-scale blooms; empty-states as a faint diluted suggestion in mist.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "tidemark",
"type": "registry:theme",
"title": "Tidemark shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#0d1417",
"foreground": "#eef2f1",
"card": "#141d22",
"card-foreground": "#eef2f1",
"popover": "#141d22",
"popover-foreground": "#eef2f1",
"primary": "#eef2f1",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#7e8c8e",
"muted-foreground": "#eef2f1",
"accent": "#e2402c",
"accent-foreground": "#ffffff",
"destructive": "#e2402c",
"border": "rgba(180,200,202,0.12)",
"input": "rgba(180,200,202,0.12)",
"ring": "#e2402c",
"chart-1": "#eef2f1",
"chart-2": "#f4f4f5",
"chart-3": "#e2402c",
"chart-4": "#6fae8f",
"chart-5": "#d6a253",
"sidebar": "#141d22",
"sidebar-foreground": "#eef2f1",
"sidebar-primary": "#eef2f1",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#6fa6c4",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "rgba(180,200,202,0.12)",
"sidebar-ring": "#e2402c",
"radius": "0.625rem"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#eef2f1",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#e2402c",
"accent-foreground": "#ffffff",
"destructive": "#e2402c",
"border": "#303642",
"input": "#303642",
"ring": "#e2402c",
"chart-1": "#eef2f1",
"chart-2": "#f4f4f5",
"chart-3": "#e2402c",
"chart-4": "#6fae8f",
"chart-5": "#d6a253",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#eef2f1",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#e2402c",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#e2402c",
"radius": "0.625rem"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019efa12-1e32-7332-a30b-a5b31811f429",
"slug": "tidemark",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"accent_strong",
"bg",
"border",
"error",
"glow",
"glow_deep",
"info",
"ink_pale",
"muted",
"on_accent",
"success",
"surface",
"surface_2",
"text",
"text_2",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"mono_font"
],
"radii": [
"control",
"full",
"none",
"panel"
],
"shadows": [
"glow",
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bloom",
"overlay",
"panel",
"pool"
],
"borders": [
"hairline",
"soft"
],
"motion": [
"ease",
"normal",
"reduced_motion",
"slow"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Tidemarkand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.
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.
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #0d1417;
--foreground: #eef2f1;
--card: #141d22;
--card-foreground: #eef2f1;
--popover: #141d22;
--popover-foreground: #eef2f1;
--primary: #eef2f1;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #7e8c8e;
--muted-foreground: #eef2f1;
--accent: #e2402c;
--accent-foreground: #ffffff;
--destructive: #e2402c;
--border: rgba(180,200,202,0.12);
--input: rgba(180,200,202,0.12);
--ring: #e2402c;
--chart-1: #eef2f1;
--chart-2: #f4f4f5;
--chart-3: #e2402c;
--chart-4: #6fae8f;
--chart-5: #d6a253;
--sidebar: #141d22;
--sidebar-foreground: #eef2f1;
--sidebar-primary: #eef2f1;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #6fa6c4;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: rgba(180,200,202,0.12);
--sidebar-ring: #e2402c;
--radius: 0.625rem;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #eef2f1;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #e2402c;
--accent-foreground: #ffffff;
--destructive: #e2402c;
--border: #303642;
--input: #303642;
--ring: #e2402c;
--chart-1: #eef2f1;
--chart-2: #f4f4f5;
--chart-3: #e2402c;
--chart-4: #6fae8f;
--chart-5: #d6a253;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #eef2f1;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #e2402c;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #e2402c;
--radius: 0.625rem;
}
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 TidemarkShadcnKit() {
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">Tidemark</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>
);
}
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"type": "registry:theme",
"name": "tidemark",
"title": "Tidemark",
"description": "Dark water-ink theme: deep wet-slate ground, luminous cyan waterline, single vermillion seal. Soft 24px panels, no border edge accents, cool deep-water shadows.",
"cssVars": {
"theme": {
"font-sans": "Inter, system-ui, sans-serif",
"font-display": "Space Grotesk, system-ui, sans-serif",
"font-mono": "Space Mono, ui-monospace, monospace",
"radius": "24px"
},
"light": {
"background": "#0d1417",
"foreground": "#eef2f1",
"card": "#141d22",
"card-foreground": "#eef2f1",
"popover": "#1b262c",
"popover-foreground": "#eef2f1",
"primary": "#e2402c",
"primary-foreground": "#fbf3ee",
"secondary": "#1b262c",
"secondary-foreground": "#b9c4c5",
"muted": "#1b262c",
"muted-foreground": "#7e8c8e",
"accent": "#7fd4d0",
"accent-foreground": "#0d1417",
"destructive": "#e2402c",
"destructive-foreground": "#fbf3ee",
"border": "rgba(180,200,202,0.12)",
"input": "#1b262c",
"ring": "#7fd4d0",
"radius": "24px",
"chart-1": "#7fd4d0",
"chart-2": "#e2402c",
"chart-3": "#3f8f8c",
"chart-4": "#56676b",
"chart-5": "#b9c4c5"
},
"dark": {
"background": "#0d1417",
"foreground": "#eef2f1",
"card": "#141d22",
"card-foreground": "#eef2f1",
"popover": "#1b262c",
"popover-foreground": "#eef2f1",
"primary": "#e2402c",
"primary-foreground": "#fbf3ee",
"secondary": "#1b262c",
"secondary-foreground": "#b9c4c5",
"muted": "#1b262c",
"muted-foreground": "#7e8c8e",
"accent": "#7fd4d0",
"accent-foreground": "#0d1417",
"destructive": "#e2402c",
"destructive-foreground": "#fbf3ee",
"border": "rgba(180,200,202,0.12)",
"input": "#1b262c",
"ring": "#7fd4d0",
"radius": "24px",
"chart-1": "#7fd4d0",
"chart-2": "#e2402c",
"chart-3": "#3f8f8c",
"chart-4": "#56676b",
"chart-5": "#b9c4c5"
}
}
}
# Tidemark shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019efa12-1e32-7332-a30b-a5b31811f429`
Slug: `tidemark`
## Intent
Tidemark reads a screen as a deep, still pool seen from below the surface. A single drop lands; what matters is dense and near the strike, and everything else diffuses outward into the dark water until it dissolves to a pale wash. Hierarchy is radial distance from the strike, not stacked weight or coloured chrome. The mode is dark on purpose — a wet-slate ground where pale wash and a lone vermillion seal read as light rising through water. The name is the line the receding water leaves behind.
## 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:
{
"bg": "#0d1417",
"surface": "#141d22",
"surface_2": "#1b262c",
"text": "#eef2f1",
"text_2": "#b9c4c5",
"muted": "#7e8c8e",
"ink_pale": "#56676b",
"accent": "#e2402c",
"accent_strong": "#c2331f",
"on_accent": "#fbf3ee",
"glow": "#7fd4d0",
"glow_deep": "#3f8f8c",
"border": "rgba(180,200,202,0.12)",
"success": "#6fae8f",
"warning": "#d6a253",
"error": "#e2402c",
"info": "#6fa6c4"
}
Typography:
{
"base_size": "17.5px",
"body_font": "Inter",
"heading_font": "Space Grotesk",
"mono_font": "Space Mono",
"heading_weight": "600",
"heading_transform": "none",
"letter_spacing": "-0.02em",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&family=Space+Mono:wght@400;700&display=swap"
}
## Visual character to preserve
- background:#0d1417 deep wet-slate pool with cool cyan/vermillion ink-diffusion radial fields
- one luminous waterline hairline (#7fd4d0) threading every section with lit strike dots
- diffusion-ring data: SVG arcs blooming from a bright core, never bars
- wash panels: top-down dark gradient surface with one corner cyan bloom, no edge accent
- cool deep-water shadows only; long tidal easing cubic-bezier(.22,.61,.36,1) 820ms
## ShadSync visual profile
{
"family": "system",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "still",
"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/tidemark/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: Place exactly one strike-point at full ink per view and diffuse everything else outward into the dark; Thread one luminous waterline through the sections and ride lit strike dots on it; Show magnitude as a diffusion ring arc blooming from a bright core, never a bar; Reserve the vermillion seal for the single live action; use cyan glow for waterline and focus; Keep the deep wet-slate ground and cool deep-water shadows; let panels bloom from one corner
- Do not: Don't use a light cream/white ground, a second vermillion, or saturated colour beyond the one seal; Don't draw bars or pie wedges for data, or give any card a single highlighted edge; Don't trap navigation in a boxed pill bar or nest cards; Don't use a calligraphic serif masthead, warm/blue-grey chrome shadows, or symbol glyphs in copy
## 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 TidemarkShadcnKit() {
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">Tidemark</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
{
"grid": "Horizontal tideline grid; max content 1200px centred; only the hero spans 100vw. minmax(0,1fr) columns so children shrink, never overflow.",
"whitespace": "Generous tidal section gaps 56-120px; pad above every title; void carries weight as the direction ink is travelling.",
"density": "low-to-medium",
"responsive": "Single column below ~880px; rail nav collapses to a top row; rings and tables go full-width; never overflow horizontally from 390px to 2560px+.",
"breakpoints": {
"mobile": "390px",
"tablet": "880px",
"desktop": "1200px",
"wide": "2560px"
}
}
{
"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": "en-019efa12-1e32-7332-a30b-a5b31811f429",
"name": "Tidemark",
"slug": "tidemark"
},
"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": [
"background:#0d1417 deep wet-slate pool with cool cyan/vermillion ink-diffusion radial fields",
"one luminous waterline hairline (#7fd4d0) threading every section with lit strike dots",
"diffusion-ring data: SVG arcs blooming from a bright core, never bars",
"wash panels: top-down dark gradient surface with one corner cyan bloom, no edge accent",
"cool deep-water shadows only; long tidal easing cubic-bezier(.22,.61,.36,1) 820ms"
],
"visualProfile": {
"family": "system",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "still",
"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": "Tidemark 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": [
"Place exactly one strike-point at full ink per view and diffuse everything else outward into the dark",
"Thread one luminous waterline through the sections and ride lit strike dots on it",
"Show magnitude as a diffusion ring arc blooming from a bright core, never a bar",
"Reserve the vermillion seal for the single live action; use cyan glow for waterline and focus",
"Keep the deep wet-slate ground and cool deep-water shadows; let panels bloom from one corner"
],
"dont": [
"Don't use a light cream/white ground, a second vermillion, or saturated colour beyond the one seal",
"Don't draw bars or pie wedges for data, or give any card a single highlighted edge",
"Don't trap navigation in a boxed pill bar or nest cards",
"Don't use a calligraphic serif masthead, warm/blue-grey chrome shadows, or symbol glyphs in copy"
]
}
}