CMS

Shell

Every admin screen is built from the same chrome: a dot-grid topbar carrying the wordmark and breadcrumb, a grouped sidebar for navigation, and a main column that opens each view with a view header and an optional filter bar. The shell is identical across content types — only the main column changes.

Articles
Everything in the article library — drafts in progress and published pieces.

.topbar.dot-surface · .sidebar > .nav-section > .nav-label / .nav-item.is-active · .main > .view > .view-header · .filter-bar

CMS

Actions

Buttons carry every admin action. The primary button is reserved for the one main action on a screen (new, publish, save); secondary handles everything alongside it; danger is destructive only. The tiny size is for table rows and tight toolbars, and the dashed add button opens repeatable fields.

Primary action in a view header
Articles
The primary button sits at the top-right of the view.
The button set

.btn-pri · .btn-sec · .btn-danger · .btn-icon.btn-icon-danger · .btn-tiny (size modifier) · .btn-add-dashed

CMS

Inputs

Editor forms use one field language: a label (with an optional required mark), the control, and an optional note. The slug field shows its permanent path prefix inline. Filter pills sit above a library to narrow it — single-select within a group, tinted to the category colour.

Form fields
/articles/
Slugs are permanent once published — changing one issues a 301 redirect.

.field-group > .field-label / .field-req · .field-input · .field-select · .slug-field > .slug-prefix / .slug-input · .field-note-box

Filter pills — above a library

.filter-bar > .filter-label / .filter-group > .filter-pill · active state tints to --pill-cat

CMS

Status & Feedback

The system tells the author where a piece is and what just happened. Stage pills track the pipeline from idea to live; type and status badges label rows; banners confirm a save, surface errors, and mark a piece as live or scheduled.

Pipeline stage pills
Idea Concept Outline Draft Live Scheduled Hidden

The pipeline order: .pill-idea → .pill-concept → .pill-outline → .pill-draft → .pill-live. .pill-scheduled / .pill-hidden are publish states.

Type & status badges
Article Journal Live Session Experiment Published Draft Scheduled

.type-badge.tb-* labels the content type in tables · .st.st-* is the compact status chip

Banners — confirmation, errors, publish state
Saved.
Published on Mar 4, 2026 · 9:00 AM View live ↗
Scheduled for publish on Jun 12, 2026 · 8:00 AM · in 6 days

.flash-success · .form-errors · .live-banner (green, with .cms-live-dot) · .schedule-banner (amber)

Tags & labels
Series Featured value-slug Leading Design

.tag / .tag.special · .val-pill · .cat-label > .cat-label-dot

CMS

Containment

Two ways to hold content. Tables are the library's default — clickable rows with title, status, date, and row actions. Cards are for boards and grids: the ideation/draft kanban card and the published-library card. The publish box is the editor's sidebar panel.

Library table
TitleStageUpdated
A Discipline Reset
/articles/a-discipline-reset
Draft2026-06-04
Notes on Craft
/journals/notes-on-craft
Live2026-05-28

.table-card > .cms-table · rows .row-clickable · cells .td-title / .td-mono / .cell-actions

Board cards
A Discipline Reset
Art
A short summary line that wraps to two lines then truncates when it runs long enough to need it.
DraftJun 4
Pub
Leading Design
A Discipline Reset

.kcard — ideation / draft-writing board · .pub-card — published-library grid

Publish box — editor sidebar panel

.cms-publish-box.is-live — the Publish panel that opens an editor's right rail