My design system

Styleguide v0.3.0

Quiet by default, sharp on purpose.

The single source of truth. Components consume only tokens — swap a theme by overriding the color tokens, everything else stays shared.

Color

Type scale

Display 30 / bold
Heading 24 / bold
Subhead 18 / semi

Lead / standfirst — .ds-lead fills the content column, so a section intro never looks narrower than the table or card grid beneath it.

Body 15 / normal — the quick brown fox jumps over the lazy dog.
Small 13.5 / dim — supporting copy and metadata.
Eyebrow 11 / uppercase
Tight display, ink-safe — Pgjqy jumps deeply
.ds-ink-safe — a tight line-height:1.05 below the 1.25 floor, with descenders that survive compositing / clipping / print / background-clip:text. Layout stays identical.

Spacing & radius

Elevation

sh-1 (card)
sh-pop (menu/toast)

Buttons

Link as button

Badges, chips & meter

accent good P5 42

Input & callout

Integration: callouts use a left accent bar + a faint accent wash for the most important line in a card.

Card & sidebar nav

P5A component card
Cards carry a subtle shadow and lift on hover. Content uses the type + spacing scales for rhythm.

Icons — Lucide, never emoji

The system uses no emoji. Icons come from Lucide (ISC, ~1,600 glyphs): paste the SVG, add class="ds-icon" — it inherits currentColor and sizes to the text beside it, so it themes for free.

1em @ 13px 1em @ 20px

Alerts

Info. Grounded in tokens — tone set via one modifier class.
Success. The action completed.
Warning. Double-check before continuing.
Danger. This can't be undone.

Table & code

SourceItemRelevance
XSTORM research method92
GHodoo-mcp-server95
feedSimon Willison notes85
node run.sh   # fetch → ingest → analyze → judge → review

Tabs, segmented, tooltip, skeleton

Lightbox

Click-to-enlarge for screenshots and diagrams. Mark any <img> with data-ds-lightbox and wire it with the snippet below — click pops the image full-size over a theme-aware scrim; a second click or Esc pops it back. Body scroll locks while open; respects reduced motion.

Demo screenshot — click to enlarge
<img src="shot.png" data-ds-lightbox alt="…">

<script>
const lb = document.createElement('div');
lb.className = 'ds-lightbox';
lb.setAttribute('role', 'dialog');
lb.setAttribute('aria-modal', 'true');
lb.innerHTML = '<img alt="">';
document.body.appendChild(lb);
const lbImg = lb.firstChild;
const lbToggle = (open) => {
  lb.classList.toggle('open', open);
  document.documentElement.style.overflow = open ? 'hidden' : '';
};
document.querySelectorAll('img[data-ds-lightbox]').forEach(img => {
  img.addEventListener('click', () => {
    lbImg.src = img.currentSrc || img.src;
    lbImg.alt = img.alt;
    lbToggle(true);
  });
});
lb.addEventListener('click', () => lbToggle(false));
addEventListener('keydown', (e) => { if (e.key === 'Escape') lbToggle(false); });
</script>

KPI tiles & form field

Pending
42
Deferred
7
Overdue
3
We'll never share it.

Use-case presets

Same tokens + components, three layouts. Put one preset class on a wrapper.

preset-doc

Walkthroughs & BRDs

720px reading column, prose line-height, display headings, callouts, code, sticky TOC.

preset-dash
Dense
128

Sidebar, stat tiles, compact tables, tight rhythm.

preset-web
Build faster.

Hero, big display type, feature grid, pill CTAs.

Signature rail & empty state

The 115° accent→accent-2 gradient is one named token (--grad-signature) reused as the nav rail, meter, progress bar and these. Set accent-2 = accent on a client theme and it collapses to a flat bar — pop, but client-safe.

Rail card
Add .ds-rail to any panel for the gradient edge.
Nothing here yet
Empty states get a signature hairline and display type instead of a blank box.