DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path brand/loomworks-design-md-v0_1.md

version: alpha name: Loomworks description: > Machine-consumable design system for coding agents. Sibling to loomworks-brand-guide-v0_15.html (human-readable) and loomworks-logo-system-v0_1.html (logo specification). This file is the normative token source for agents building Loomworks surfaces; the HTML brand guide is the normative reference for humans reviewing, extending, or explaining the identity.

colors: # ── DESIGN.md-conventional aliases ── # These are alias names that satisfy linter conventions; the Loomworks system # uses descriptive names (below) which share the same values. Prefer the # descriptive names in any new work. primary: "#1A1814" secondary: "#4A4843" tertiary: "#B55537" neutral: "#F2EDE0"

# ── Press & ink (foreground) ── press-ink: "#1A1814" type-metal: "#4A4843" ink-faint: "#8A847A" brass: "#A89B7E"

# ── Accent (reserved) ── iron-oxide: "#B55537" iron-oxide-hot: "#9A4A30"

# ── Paper (grounds) ── cartridge: "#F2EDE0" bleached: "#FFFCF5" vellum: "#E8E1CE"

# ── Rules (dividers) ── rule: "#E0DACC" rule-soft: "#EDE7D7"

# ── Environments (the four rooms) ── env-memory: "#E4E6E8" env-manifestation: "#DCE3DB" env-shaping: "#E6D4C5" env-rendering: "#E6DCCA"

# ── Terminal states (the seven outcomes) ── state-attest: "#6B7B6E" state-promote: "#7A8B6E" state-no-change: "#8C8C82" state-amend: "#B55537" state-deliberate-exception: "#C97D52" state-retire: "#6B6358" state-escalate: "#A04A2E"

typography: h1: fontFamily: IBM Plex Serif fontSize: 3rem fontWeight: 500 lineHeight: 1.1 letterSpacing: -0.02em h2: fontFamily: IBM Plex Serif fontSize: 2rem fontWeight: 500 lineHeight: 1.15 letterSpacing: -0.01em h3: fontFamily: IBM Plex Serif fontSize: 1.5rem fontWeight: 500 lineHeight: 1.2 display-italic: fontFamily: IBM Plex Serif fontSize: 1.2rem fontWeight: 400 lineHeight: 1.55 body: fontFamily: Inter fontSize: 1rem fontWeight: 400 lineHeight: 1.6 body-em: fontFamily: Inter fontSize: 1rem fontWeight: 500 lineHeight: 1.6 caption: fontFamily: Inter fontSize: 0.85rem fontWeight: 400 lineHeight: 1.55 label: fontFamily: IBM Plex Mono fontSize: 0.7rem fontWeight: 500 letterSpacing: 0.18em mono: fontFamily: IBM Plex Mono fontSize: 0.85rem fontWeight: 400

rounded: sm: 3px md: 4px

spacing: s-1: 0.25rem s-2: 0.5rem s-3: 0.75rem s-4: 1rem s-5: 1.25rem s-6: 1.5rem s-8: 2rem s-10: 2.5rem s-12: 3rem s-16: 4rem s-20: 5rem

components: # ── Buttons ── button-primary: backgroundColor: "{colors.press-ink}" textColor: "{colors.cartridge}" typography: "{typography.body-em}" rounded: "{rounded.sm}" padding: 10px 18px button-primary-hover: backgroundColor: "{colors.type-metal}" textColor: "{colors.cartridge}"

button-secondary: backgroundColor: "{colors.bleached}" textColor: "{colors.press-ink}" borderColor: "{colors.rule}" typography: "{typography.body-em}" rounded: "{rounded.sm}" padding: 10px 18px button-secondary-hover: backgroundColor: "{colors.vellum}" borderColor: "{colors.press-ink}"

button-ghost: backgroundColor: transparent textColor: "{colors.press-ink}" typography: "{typography.body-em}" rounded: "{rounded.sm}" padding: 8px 14px button-ghost-hover: backgroundColor: "{colors.vellum}"

button-amend: backgroundColor: "{colors.iron-oxide}" textColor: "{colors.cartridge}" typography: "{typography.body-em}" rounded: "{rounded.sm}" padding: 10px 18px button-amend-hover: backgroundColor: "{colors.iron-oxide-hot}" textColor: "{colors.cartridge}"

# ── Inputs ── input: backgroundColor: "{colors.bleached}" textColor: "{colors.press-ink}" borderColor: "{colors.rule}" typography: "{typography.body}" rounded: "{rounded.sm}" padding: 10px 14px input-focus: backgroundColor: "{colors.bleached}" borderColor: "{colors.press-ink}"

# ── Card ── card: backgroundColor: "{colors.bleached}" textColor: "{colors.type-metal}" borderColor: "{colors.rule}" rounded: "{rounded.md}" padding: 1.5rem

# ── Badges ── badge: backgroundColor: "{colors.vellum}" textColor: "{colors.press-ink}" typography: "{typography.label}" rounded: "{rounded.sm}" padding: 3px 8px

badge-outlined: backgroundColor: transparent textColor: "{colors.type-metal}" borderColor: "{colors.rule}" typography: "{typography.label}" rounded: "{rounded.sm}" padding: 3px 8px

# ── Toast ── toast: backgroundColor: "{colors.press-ink}" textColor: "{colors.cartridge}" typography: "{typography.body}" rounded: "{rounded.md}" padding: 12px 18px


Overview

What this file is — and what it isn't

This is the machine-consumable expression of the Loomworks design system, written to the DESIGN.md specification maintained by Google Labs at github.com/google-labs-code/design.md. Coding agents — Stitch, Claude Code, or any agent that understands the DESIGN.md format — can read this file and produce UI that reads as Loomworks without needing to parse the human-readable brand guide.

This is not the brand guide itself. The brand guide is loomworks-brand-guide-v0_15.html — an 8-part HTML document with specimens, composed contexts, discovery records, and prose rationale for every decision in the system. A human reviewing, extending, or explaining the identity works from the HTML. An agent building a surface works from this file.

This is not the logo specification either. The logo lives in loomworks-logo-system-v0_1.html — geometry, clear-space rules, reductions, cosign configurations. The DESIGN.md schema does not model logo geometry, so agents that need to place the mark should retrieve the SVG from the logo system document and use it as a fixed asset.

When to use which artifact

| Artifact | Audience | Use when | | --- | --- | --- | | loomworks-design-md-v0_1.md | Coding agents | Building a new Loomworks surface, a component, or a page that must read as the brand | | loomworks-brand-guide-v0_15.html | Humans | Reviewing the system, extending it, explaining decisions, onboarding new team members | | loomworks-logo-system-v0_1.html | Both | Placing the logo or wordmark in any context — use the SVG geometry specified there |

The brand in one paragraph

Loomworks is DUNIN7's engagement-memory environment for the agentic business era. The visual system is letterpress — warm cartridge paper, deep press-ink type set in IBM Plex Serif, a single reserved iron-oxide accent that appears only at moments of consequence (amend, escalate, the stamp mark's accent square). The voice is considered, calm, unhurried; the motion is patient; the components are typographic and structural rather than decorated. Loomworks is sibling to Forge (a separate DUNIN7 product with its own identity — operational and execution-facing) and built on the Loom Protocol.

The identity mark — summary

Two-part logo system:

Full geometry, size ladders, lockup configurations, reductions, and DUNIN7 cosign patterns live in loomworks-logo-system-v0_1.html. Agents should retrieve the SVG source from there.

Two case forms govern how the name appears in text:

Never use ALL CAPS inside running text; it reads as shouting.

Colors

The Loomworks palette is organized by role, not by hue family. There is no 100/200/300 scale and no "gray family" — each token has a specific job. The structure has six role groups plus two conventional aliases for DESIGN.md compatibility.

Role groups

Press & ink, accent, paper, rules, environments, terminal states. Explained below.

Press & ink (foreground)

The ink tokens carry text, strokes, and primary buttons. Four values, from deepest to faintest.

Accent — iron-oxide, held back

The iron-oxide is the single hot color in the system and is reserved for moments of consequence: the amend terminal state, the escalate state, the stamp mark's accent square, block-label tags in brand documentation. Do not use iron-oxide for general UI emphasis — that is the job of press-ink and of weight/size in typography. Iron-oxide is for signaling that something consequential is happening.

Paper — the three grounds

Loomworks sits on warm paper, never on pure white. Three grounds form a hierarchy: cartridge is the page; bleached is what's raised above the page (cards, panels); vellum is what's bracketed off from the main flow (set-asides, archival surfaces).

Rules — dividers

Two weights, structural rather than decorative.

Environments — the four rooms

Loomworks organizes its workspace into four rooms: Memory (looking back), Manifestation (what exists now), Shaping (active work happening), Rendering (artifacts coming out). Each room has its own atmospheric tint — a full-bleed background color that signals to the Operator which room they are in. Environment tints are atmosphere, not content. They colour the air; they do not colour individual components.

Agents building a room surface should apply the corresponding environment color to the outer frame / body background, then allow the standard bleached/cartridge component colors to sit on top of it.

Terminal states — the seven outcomes

Every consideration in Loomworks closes with one of seven terminal states. Each has a designated state color, used on badges, status dots, and timestamp indicators. The amend state intentionally reuses the iron-oxide value — amend is the most consequential outcome (the seed itself changes) and inherits the brand accent.

Typography

Three typefaces, each with a specific role. Do not substitute without updating the design system.

Display — IBM Plex Serif

Used for all headings (h1 through h3), for the foundry wordmark, and for body emphasis in italic (display-italic). IBM Plex Serif carries the letterpress character of the identity; it is the typographic equivalent of the iron-oxide accent — the hot color of the typeface system.

Body — Inter

All running prose, all UI labels longer than a few words, all form inputs. Inter is the workhorse; it is deliberately plain so that the serif headings do the expressive work.

Mono — IBM Plex Mono

Used for structural elements: identifiers, timestamps, metadata strips, labels, CSS token references in documentation, code. Never used for prose.

Italic usage

Italic is load-bearing in Loomworks. It is used for: ledes and intros, inline emphasis in prose, section introduction paragraphs, and the wordmark variant "Loomworks" when it needs to be marked as a proper noun getting gentle emphasis in text. Italic is IBM Plex Serif Italic 400; never Inter Italic.

Layout

Spacing scale

Eleven spacing tokens. The scale intentionally skips values (no s-7, no s-9, no s-11, no s-13/14/15, no s-17/18/19) — a complete 1-through-20 scale invites precision that isn't real. If a designer wants s-7, the decision is between s-6 and s-8, not between the three.

Default layout decisions:

Rules — horizontal dividers

Loomworks uses thin horizontal rules extensively as structural dividers. Rule stroke-width scales with the element it divides:

| Context | Stroke-width | | --- | --- | | Hero / landing wordmark | 1.0 | | Footer / formal wordmark | 0.8 | | Chrome / nav wordmark | 0.6 | | Caption / minimum wordmark | 0.5 | | Card internal dividers | 1.0 (rule color) | | Section top borders (h2) | 1.0 (press-ink) |

Agents should treat rule weight as derived from the wordmark or heading it accompanies, not as a fixed CSS token.

Clear space around marks

Elevation & Depth

Loomworks uses minimal shadows. Depth is expressed primarily through the paper-ground hierarchy: cartridge (page) → bleached (cards raised above page) → vellum (set-asides bracketed off). Agents building surfaces should use paper-color changes as the default depth mechanism, not shadows.

Where shadows are necessary (elevated modals over a backdrop, popovers):

Do not use shadows to imply interactive affordance (buttons do not have shadows). Do not use inset shadows to imply depressed states.

Shapes

Border radii — two values

Loomworks does not use larger radii. The letterpress character requires squared or barely-softened corners. Pills (badges with full rounding) are the one exception; use 9999px directly for those.

The stamp mark square

The stamp mark's border is a hard-edged square with no corner rounding (viewBox 0 0 120 120, rect at 20 20 80 80). This is deliberate and should not be softened when reproducing the mark at any size.

Components

The components section below defines the normative tokens for the base component variants. Visual reference for every variant — including composed contexts, state variations, and edge cases — lives in loomworks-brand-guide-v0_15.html Part three (reference gallery). Agents should use the component tokens defined in this file's front matter and treat the HTML gallery as the visual truth for arrangement and spacing.

Buttons

Four variants:

Each button has a -hover variant defined in the front matter.

Inputs

Single variant {components.input} with a {components.input-focus} state. Focus removes the rule border and replaces it with press-ink. No focus ring outside the border itself.

Cards

{components.card} — bleached background, rule border, {rounded.md} radius. The workhorse container. Cards do not have shadows.

Badges

Room badges frequently include a state dot — a 6px circle filled with the corresponding state color, placed before the badge label with a 6px gap.

What's documented in the HTML guide, not here

The DESIGN.md schema does not model: modals, navigation chrome (tabs, room-switcher), toasts with their animation states, tables, loading states (skeleton sweep, pulse), or empty states. All of these are documented in loomworks-brand-guide-v0_15.html Part three. When building one of these, agents should consult the HTML reference and derive the styling from the token values in this file.

Do's and Don'ts

Do

Don't

Motion

> This section is not in the canonical DESIGN.md section order. It is preserved here because motion is normative for Loomworks but does not have a token-level representation in the current DESIGN.md spec. A linter strict about section order may flag this as a warning; that warning is accepted.

Three duration tokens, three ease curves, and a pattern table.

Duration tokens

| Token | Value | Use | | --- | --- | --- | | duration-fast | 150ms | Micro-interactions: hover, focus, tooltip. | | duration-normal | 250ms | Default state changes: tab switch, accordion expand. | | duration-slow | 400ms | Set-piece transitions: modal open, bottom-sheet slide. |

Ease curves

| Token | Value | Use | | --- | --- | --- | | ease-out | cubic-bezier(0.22, 1, 0.36, 1) | Default; most entrances and state changes. | | ease-in-out | cubic-bezier(0.65, 0, 0.35, 1) | Bi-directional motion; drawer slide, accordion. | | ease-in | cubic-bezier(0.4, 0, 1, 1) | Exits only. |

Pattern summary

Full pattern table is in loomworks-brand-guide-v0_15.html Part eight. Key assignments:

Motion principles

Motion confirms (an action registered), orients (where elements came from), and sets pace (what kind of moment this is). Motion does not perform (no springs, no bounces, no elastic overshoots), does not decorate (no ambient or idle animations), does not stack (two motions rarely happen at once), and does not override prefers-reduced-motion (when the OS requests reduced motion, transitions collapse to zero and states change instantly — no workarounds).

Expected linter findings

This file is designed to lint cleanly against the DESIGN.md alpha specification, with a small set of accepted findings:

| Rule | Severity | Count | Why accepted | | --- | --- | --- | --- | | orphaned-tokens | warning | ~12 | Many colors (paper variants, rules, environments, states) are defined as role tokens and are referenced in prose rather than in the narrow components section. The DESIGN.md component schema supports only a minority of the surfaces Loomworks uses these colors in. | | unknown-property: borderColor | warning | ~5 | borderColor is not in the spec's component property list (backgroundColor, textColor, typography, rounded, padding, size, height, width) but is essential to the letterpress identity. Accepting the warning deliberately. | | section-order | warning | 1 | The Motion section is non-canonical and appears after the canonical sections. Accepting. | | missing-primary | — | 0 | Resolved by the primary alias token. | | missing-typography | — | 0 | Typography tokens are present. | | contrast-ratio | — | 0 | All component background/text pairs pass WCAG AA at 4.5:1 minimum. Press-ink on cartridge = 15:1; iron-oxide on cartridge = 5.1:1; cartridge on press-ink = 15:1. | | broken-ref | — | 0 | All token references resolve. |


Loomworks — DESIGN.md — v0.1 — 2026-04-23 DUNIN7 — Done In Seven LLC — Miami, Florida