IDM DS

One component set, seven editorial brands. A themeable system where the primitives hold still and only the theme layer moves.

Status
In progress

Iron Diamond Media runs seven sister publications, Arizona Bride among them. Each has its own palette, its own typographic voice, and, until now, its own half-maintained set of components.

The system's whole job is to make that sustainable: primitives are shared and theme-agnostic; brands supply a token file and nothing else.

The theming contract

A brand theme is a flat map of the same keys. No brand adds a key, no brand removes one. If a design needs a token the contract doesn't have, that's a change to the contract, not a one-off.

themes/arizona-bride.json
{
  "brand": "arizona-bride",
  "color": {
    "accent": "#e996b3",
    "accent-contrast": "#3d1520",
    "ink": "#1a1416",
    "ink-muted": "#6b5a60",
    "surface": "#fffdfd",
    "surface-sunken": "#faf3f5",
    "rule": "#e8dce0"
  },
  "type": {
    "display": "\"Canela Deck\", Georgia, serif",
    "body": "\"Söhne\", system-ui, sans-serif"
  },
  "radius": { "sm": "2px", "md": "4px", "lg": "8px" }
}

Primitives read only from that map:

primitives/card.css
.idm-card {
  background: var(--color-surface);
  border: 1px solid var(--color-rule);
  border-radius: var(--radius-lg);
  color: var(--color-ink);
}
 
.idm-card__kicker {
  color: var(--color-accent-contrast);
  font-family: var(--type-body);
}

No primitive may reference a brand by name. A .idm-card--arizona-bride selector anywhere in the codebase is a bug, not a feature.

Foundations

Radius as brand signal

Radius does more identity work here than color does. The editorial brands run near-square; the vendor-facing platform rounds off.

Brand groupsmmdlgReads as
Editorial (5)2px4px8pxPrint, considered
Vendor platform6px10px16pxSoftware, approachable

The seven-brand check

Build the primitive against the base theme only, no brand in the file.

Render it in all seven themes side by side at three breakpoints.

Any theme that needs a component-level override fails the check. Fix the contract or fix the primitive.

Publish, then add the changelog entry with the contract version it targets.

Components

Nothing published yet. Build order follows what all seven brands share most:

ComponentStatusThemes passing
Article cardIn Figma5 / 7
Section ruleIn Figma7 / 7
BylineDesign
Vendor listingDesign
Newsletter captureNot started

Article card fails on the two vendor-platform themes: the radius jump breaks the image crop. That's a contract problem, not a card problem.

Changelog

  • 2026-08-11: Radius promoted to a contract key after the card failure.
  • 2026-06-30: Seven-brand check added to the publish gate.
  • 2026-05-14: Theming contract drafted.