Skip to content
ASBURYAI SOLUTIONS Start a project
Asbury Cyber · v1.0.0

The theme, written down.

Near-black ink, pale paper text, one phosphor signal, hairline borders, square corners. The same tokens as the compiled pages. Class prefix cy-.

Updated 2026-11-06Instrument Sans + Space MonoSelf-hosted

01 / Rules

One signal. Square corners.

Phosphor marks the one thing that matters on the screen. Everything else stays ink, paper, and a 1px line.

  1. 01

    One signal

    Phosphor is the primary action, the active state, and the live indicator. It is not a second palette.

  2. 02

    Hairlines, no shadow

    Square corners. 1px borders. The only texture is the phosphor grid.

  3. 03

    Self-hosted type

    Instrument Sans and Space Mono from this site. No third-party font requests.

  4. 04

    44px targets

    Mobile first, down to 360px. Focus rings stay visible. Paper sections are for a short close, not a long article.

02 / Color

Tokens

Swatches use the CSS variables. The machine-readable copy is /assets/cyber/tokens.json.

background: var(--phosphor-500); color: var(--ink-950);
03 / Type

Sans for the sentence. Mono for the label.

Kicker · cy-kicker

Display

Mono label

Section heading

A lede stays inside the measure and uses the softer paper color.

Body copy sits in .cy-prose. Links inside prose use the signal color. Strong stays paper.

.cy-kicker + h2 + .cy-lede
04 / Components

The parts, live.

Each block below is the real component. The line under it is the class to copy.

Buttons

Primary Outline
.cy-button.cy-button--primary | --outline | --ghost | --small | --block

Status and chips

Live Done In progress Planned Warn Danger
  • Default
  • Signal
  • Solid
  • Pressed
.cy-status--live | .cy-chip .cy-chip--signal .cy-chip--tap

Cards and stats

  • QuietA card

    Raised ink, hairline, no shadow.

    .cy-card
  • GridWith the field

    The phosphor grid is the only texture.

  • FillOne signal

    Use the fill once on a screen.

  • Version1.0.0
  • Prefixcy-
  • Signal1
.cy-card-grid--3 > .cy-card | .cy-stats > .cy-stat

Lists, timeline, phases

  1. Now

    v1.0.0

    The live theme, written down as one stylesheet.

  2. Next

    Shell resync

    Compiled pages pick up later token changes from the same file.

  1. PhaseTokens
  2. PhaseType
  3. PhaseChrome
  4. PhaseParts
  5. PhasePages
  • Ink
  • Paper
  • Phosphor
.cy-timeline | .cy-phase-row | .cy-node-row | .cy-list

Disclosure and tabs

Where the header comes from Do not hand-edit the nav

Static pages paste the header and footer from one module so the nav cannot drift. This page’s chrome is that paste.

What stays off this stylesheet Legacy pages keep their files

Older pages keep their URLs. New pages do not link the legacy stylesheets.

Ink, paper, and one phosphor. Warn, danger, and info are status only.

details.cy-details | [data-cy-tabs] > button.cy-tab

Forms

.cy-field > .cy-input | .cy-select | .cy-textarea | .cy-check | .cy-switch

Notices

A note is the short callout. Use it for one fact, not a paragraph stack.

Signal. The default notice is a left phosphor rule.

Warn. Amber is status, not a second brand color.

Info. Cyan is the same: status only.

.cy-note | .cy-notice .cy-notice--warn .cy-notice--danger .cy-notice--info

Table, keys, meter

Sample sortable rows
Token Step
Ink950
Paper100
Phosphor500
Prefix
cy-
Radius
0
Header
74px, 64px on a phone
Measure72%
  • SansBody
  • MonoLabel
table.cy-table[data-cy-sortable] | dl.cy-kv | .cy-meter | .cy-bar-list

Wayfinding and code

Press Tab to move. The focus ring is phosphor.

.cy-button.cy-button--primary
.cy-breadcrumb | .cy-pagination | pre.cy-code | kbd.cy-kbd | [data-cy-copy]

Dialog and empty

Nothing queuedAn empty state is a sentence and a next step.
dialog.cy-dialog | dialog.cy-drawer | [data-cy-open] | .cy-empty
05 / Changelog

v1.0.0

2026-11-06. First public write-down of the live ink-and-phosphor theme: tokens, components, and this page.

Next

Use it on a real page.

New static pages start from this system. The header on this page is the one the other static pages share.

Dialog

A dialog keeps the page underneath. Escape or the backdrop closes it.

Drawer

A drawer is the same dialog, pinned to the edge. Use it for a filter or a short detail, not a second page.