Visual kits for agents that need to design well
Pick what you're building, preview every kit on that surface, and hand your agent a complete visual system — fonts, colors, tokens, and component rules.
Pick what you're building, preview every kit on that surface, and hand your agent a complete visual system — fonts, colors, tokens, and component rules.
A Swiss-modern editorial system pairing a confident emerald green with a powdery pink accent over crisp neutral surfaces. Flat depth, tight grids, and monospace details give it an intentional, print-like feel across light and dark modes. Headings run bold in Space Grotesk, body sits in Inter, and Space Mono carries labels and captions. Corners stay near-sharp, borders are thin 1px rules, and heading letter-spacing is tight for a printed, deliberate character.
tealroseeditorial.com
Teal Rose
Every kit is judged per use case against concrete criteria — chart-series distinctness, text contrast, information density — not keyword matching.
---
# Machine-readable tokens (the WHAT). The prose body gives the WHY + the rules.
# contract is THIS DOCUMENT'S shape and has nothing to do with the kit's
# revision below. It moves when a section is added, renamed or removed; a kit
# that never changed can arrive under a new one, and a kit that changed every
# token arrives under the same one. Read them independently.
#
# FIRST key on purpose. `name` is caller-supplied and yamlQuote escapes only the
# double quote, so a crafted kit name can inject lines into this block — every
# reader of this front matter honours the FIRST occurrence of a key, which puts
# an injected duplicate too late to matter.
contract: "1.0"
kit:
# The id is the durable handle; name and slug are both mutable.
# version is this record's monotonic revision: 0 = never versioned,
# null = the server did not report one. Diff against it; don't hash the file.
id: "c087dbc7-7453-4245-aa78-27018cd275d9"
version: 0
slug: "teal-rose-editorial"
name: "Teal Rose Editorial"
colors:
roles_light:
background: "#FBFDF9"
foreground: "#191C1A"
card: "#FFFFFF"
card-foreground: "#191C1A"
popover: "#FFFFFF"
popover-foreground: "#191C1A"
primary: "#1F9E72"
primary-foreground: "#000000"
secondary: "#E4EDE7"
secondary-foreground: "#283832"
muted: "#EEF3F0"
muted-foreground: "#566660"
accent: "#FCB9CB"
accent-foreground: "#5A2436"
destructive: "#BA1A1A"
destructive-foreground: "#FFFFFF"
border: "#D3DDD6"
input: "#D3DDD6"
ring: "#1F9E72"
success: "#1F9E72"
success-foreground: "#000000"
warning: "#C77716"
warning-foreground: "#000000"
chart-1: "#1F9E72"
chart-2: "#FCB9CB"
chart-3: "#275C44"
chart-4: "#54B393"
chart-5: "#DBACBC"
roles_dark:
background: "#11140F"Three ways from the same kit: run "npx identityforge@latest apply teal-rose-editorial" with the CLI to write the tokens and DESIGN.md into your project, fetch it through the Identity Forge MCP server inside Claude Code, Cursor, or OpenCode, or install from the shadcn registry at /r/teal-rose-editorial.json with "npx shadcn add".
A complete brand system: a font pairing, 28 semantic color tokens in light and dark, a typography scale, spacing and elevation, per-element treatments, distinctive motifs, do's and don'ts, and a DESIGN.md a coding agent builds from. Exports cover shadcn registry items, Tailwind v3 and v4 themes, DTCG tokens JSON, and plain CSS variables.
Teal Rose Editorial is free: its full color tokens, fonts, DESIGN.md, and every export are available at no cost.
Supporting copy goes here.
/*
* Teal Rose Editorial — Identity Forge design kit.
* Kit id: c087dbc7-7453-4245-aa78-27018cd275d9
* Kit slug: teal-rose-editorial (a mutable alias; the id is the durable handle)
* Kit version: 0 (no version minted yet)
*/
@import url("https://fonts.googleapis.com/css2?family=Space%20Grotesk:wght@400;500;700&family=Inter:wght@400;500;600;700&family=Space%20Mono:wght@400;700&display=swap");
:root {
--radius: 0.25rem;
--font-heading: 'Space Grotesk', sans-serif;
--font-sans: 'Inter', sans-serif;
--font-mono: 'Space Mono', monospace;
--background: 90 50% 98%;
--foreground: 140 6% 10%;
--card: 0 0% 100%;
--card-foreground: 140 6% 10%;
--popover: 0 0% 100%;
--popover-foreground: 140 6% 10%;
--primary: 159 67% 37%;
--primary-foreground: 0 0% 0%;
--secondary: 140 20% 91%;
--secondary-foreground: 158 17% 19%;
--muted: 144 17% 94%;
--muted-foreground: 157 9% 37%;
--accent: 344 92% 86%;
--accent-foreground: 340 43% 25%;
--destructive: 0 75% 42%;
--destructive-foreground: 0 0% 100%;
--border: 138 13% 85%;
--input: 138 13% 85%;
--ring: 159 67% 37%;
--success: 159 67% 37%;
--success-foreground: 0 0% 0%;
--warning: 33 80% 43%;
--warning-foreground: 0 0% 0%;
--chart-1: 159 67% 37%;
--chart-2: 344 92% 86%;
--chart-3: 153 40% 26%;
--chart-4: 160 38% 52%;
--chart-5: 340 39% 77%;
--shadow-sm: 0 1px 0 0 rgba(25,28,26,0.06);
--shadow-md: 0 1px 2px 0 rgba(25,28,26,0.08);
--shadow-lg: 0 2px 6px 0 rgba(25,28,26,0.10);
--shadow-xl: 0 8px 24px -8px rgba(25,28,26,0.16);
--gradient-hero: linear-gradient(135deg, #1f9e72 0%, #54b393 50%, #fcb9cb 100%);
--gradient-brand: linear-gradient(90deg, #1f9e72 0%, #275c44 100%);
--gradient-subtle: linear-gradient(180deg, #fbfdf9 0%, #eef3f0 100%);
--duration: 180ms;
--duration-slow: 320ms;
--ease: cubic-bezier(0.2, 0, 0, 1);
--tracking-tight: -0.02em;
--tracking-normal: 0em;
--font-weight-heading: 700;
--font-weight-body: 400;
--button-radius: 0.125rem;
--card-radius: 0.375rem;
--input-radius: 0.125rem;
--badge-radius: 0.125rem;
--border-width: 1px;Registry
/r/teal-rose-editorial.jsonTailwind v4
/*
* Teal Rose Editorial — Identity Forge design kit.
* Kit id: c087dbc7-7453-4245-aa78-27018cd275d9
* Kit slug: teal-rose-editorial (a mutable alias; the id is the durable handle)
* Kit version: 0 (no version minted yet)
*
* Drop-in Tailwind v4 theme: font import, the custom properties the theme
* aliases, and the @theme block. Expects `@import "tailwindcss";` above it,
* and the @import lines must stay at the top of the stylesheet.
*/
@import url("https://fonts.googleapis.com/css2?family=Space%20Grotesk:wght@400;500;700&family=Inter:wght@400;500;600;700&family=Space%20Mono:wght@400;700&display=swap");
:root {
--radius: 0.25rem;
--font-heading: 'Space Grotesk', sans-serif;
--font-sans: 'Inter', sans-serif;
--font-mono: 'Space Mono', monospace;
--background: 90 50% 98%;
--foreground: 140 6% 10%;
--card: 0 0% 100%;
--card-foreground: 140 6% 10%;
--popover: 0 0% 100%;
--popover-foreground: 140 6% 10%;
--primary: 159 67% 37%;
--primary-foreground: 0 0% 0%;
--secondary: 140 20% 91%;
--secondary-foreground: 158 17% 19%;
--muted: 144 17% 94%;
--muted-foreground: 157 9% 37%;
--accent: 344 92% 86%;
--accent-foreground: 340 43% 25%;
--destructive: 0 75% 42%;
--destructive-foreground: 0 0% 100%;
--border: 138 13% 85%;
--input: 138 13% 85%;
--ring: 159 67% 37%;
--success: 159 67% 37%;
--success-foreground: 0 0% 0%;
--warning: 33 80% 43%;
--warning-foreground: 0 0% 0%;
--chart-1: 159 67% 37%;
--chart-2: 344 92% 86%;
--chart-3: 153 40% 26%;
--chart-4: 160 38% 52%;
--chart-5: 340 39% 77%;
--shadow-sm: 0 1px 0 0 rgba(25,28,26,0.06);
--shadow-md: 0 1px 2px 0 rgba(25,28,26,0.08);
--shadow-lg: 0 2px 6px 0 rgba(25,28,26,0.10);
--shadow-xl: 0 8px 24px -8px rgba(25,28,26,0.16);
--gradient-hero: linear-gradient(135deg, #1f9e72 0%, #54b393 50%, #fcb9cb 100%);
--gradient-brand: linear-gradient(90deg, #1f9e72 0%, #275c44 100%);
--gradient-subtle: linear-gradient(180deg, #fbfdf9 0%, #eef3f0 100%);
--duration: 180ms;
--duration-slow: 320ms;
--ease: cubic-bezier(0.2, 0, 0, 1);
--tracking-tight: -0.02em;
--tracking-normal: 0em;
--font-weight-heading: 700;
--font-weight-body: 400;
--button-radius: 0.125rem;
--card-radius: 0.375rem;
--input-radius: 0.125rem;
--badge-radius: 0.125rem;
--border-width: 1px;
--card-border-width: 1px;
--input-border-width: 1px;
--button-border-width: 1px;
--badge-border-width: 1px;
--heading-transform: none;
--label-transform: none;
--kit-id: "c087dbc7-7453-4245-aa78-27018cd275d9";
--kit-version: 0;
}
.dark {
--radius: 0.25rem;
--font-heading: 'Space Grotesk', sans-serif;
--font-sans: 'Inter', sans-serif;
--font-mono: 'Space Mono', monospace;
--background: 96 14% 7%;
--foreground: 90 7% 88%;
--card: 100 12% 10%;
--card-foreground: 90 7% 88%;
--popover: 100 12% 10%;
--popover-foreground: 90 7% 88%;
--primary: 157 62% 61%;
--primary-foreground: 162 100% 11%;
--secondary: 143 11% 15%;
--secondary-foreground: 148 22% 85%;
--muted: 146 11% 13%;
--muted-foreground: 146 7% 63%;
--accent: 343 61% 76%;
--accent-foreground: 341 47% 15%;
--destructive: 6 100% 84%;
--destructive-foreground: 357 100% 21%;
--border: 140 9% 19%;
--input: 140 9% 19%;
--ring: 157 62% 61%;
--success: 157 62% 61%;
--success-foreground: 162 100% 11%;
--warning: 34 70% 59%;
--warning-foreground: 37 81% 13%;
--chart-1: 157 62% 61%;
--chart-2: 343 61% 76%;
--chart-3: 160 38% 52%;
--chart-4: 156 91% 74%;
--chart-5: 340 39% 77%;
}
@theme inline {
--font-heading: 'Space Grotesk', sans-serif;
--font-sans: 'Inter', sans-serif;
--font-mono: 'Space Mono', monospace;
--color-background: hsl(var(--background));
--color-foreground: hsl(var(--foreground));
--color-card: hsl(var(--card));
--color-card-foreground: hsl(var(--card-foreground));
--color-popover: hsl(var(--popover));
--color-popover-foreground: hsl(var(--popover-foreground));
--color-primary: hsl(var(--primary));
--color-primary-foreground: hsl(var(--primary-foreground));
--color-secondary: hsl(var(--secondary));
--color-secondary-foreground: hsl(var(--secondary-foreground));
--color-muted: hsl(var(--muted));
--color-muted-foreground: hsl(var(--muted-foreground));
--color-accent: hsl(var(--accent));
--color-accent-foreground: hsl(var(--accent-foreground));
--color-destructive: hsl(var(--destructive));
--color-destructive-foreground: hsl(var(--destructive-foreground));
--color-border: hsl(var(--border));
--color-input: hsl(var(--input));
--color-ring: hsl(var(--ring));
--color-success: hsl(var(--success));
--color-success-foreground: hsl(var(--success-foreground));
--color-warning: hsl(var(--warning));
--color-warning-foreground: hsl(var(--warning-foreground));
--color-chart-1: hsl(var(--chart-1));
--color-chart-2: hsl(var(--chart-2));
--color-chart-3: hsl(var(--chart-3));
--color-chart-4: hsl(var(--chart-4));
--color-chart-5: hsl(var(--chart-5));
--radius-sm: 0rem;
--radius-md: 0.125rem;
--radius-lg: 0.25rem;
--radius-xl: 0.375rem;
--radius-button: 0.125rem;
--radius-card: 0.375rem;
--radius-input: 0.125rem;
--radius-badge: 0.125rem;
--border-width: 1px;
--card-border-width: 1px;
--input-border-width: 1px;
--button-border-width: 1px;
--badge-border-width: 1px;
--shadow-sm: 0 1px 0 0 rgba(25,28,26,0.06);
--shadow-md: 0 1px 2px 0 rgba(25,28,26,0.08);
--shadow-lg: 0 2px 6px 0 rgba(25,28,26,0.10);
--shadow-xl: 0 8px 24px -8px rgba(25,28,26,0.16);
--tracking-tight: -0.02em;
--tracking-normal: 0em;
--ease-kit: cubic-bezier(0.2, 0, 0, 1);
--duration-kit: 180ms;
--duration-kit-slow: 320ms;
--gradient-hero: linear-gradient(135deg, #1f9e72 0%, #54b393 50%, #fcb9cb 100%);
--gradient-brand: linear-gradient(90deg, #1f9e72 0%, #275c44 100%);
--gradient-subtle: linear-gradient(180deg, #fbfdf9 0%, #eef3f0 100%);
--font-weight-heading: 700;
--font-weight-body: 400;
}Registry payload
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "teal-rose-editorial",
"type": "registry:theme",
"title": "Teal Rose Editorial",
"description": "A constructivist editorial kit anchored on vivid green and soft pink, built for typographic, grid-driven interfaces.",
"categories": [
"editorial",
"constructivist",
"swiss",
"monospace",
"green",
"pink",
"flat",
"grid"
],© 2026 Identity Forge. All rights reserved.
Munich, Germany