Design Tokens

CSS custom properties that define the framework's visual identity. Override these to create custom themes without touching structural CSS.

Typography

--font-body
Inter, system-ui, sans-serif — Body text, headings, UI elements
--font-mono
JetBrains Mono, ui-monospace, monospace — Code, data values, navigation separators

These map to Pico's internal variables:

--asw-font-body: 'Inter', system-ui, sans-serif;
--asw-font-mono: 'JetBrains Mono', monospace;

Colors

Background

TokenDefaultUsage
--bg-primary#0a0a0aMain page background
--bg-secondary#111111Code blocks, alternating rows
--bg-card#0f0f0fArticles, cards, elevated surfaces

Borders

TokenDefaultUsage
--border-color#262626Default borders
--border-color-subtle#1a1a1aVery subtle dividers

Text

TokenDefaultUsage
--text-primary#e5e5e5Main body text
--text-secondary#a3a3a3Secondary text
--text-muted#737373Metadata, muted content
--text-dim#525252Very dim, separators

Accents

TokenDefaultSemantic Use
--accent#22c55ePrimary actions, positive status, "awake"
--accent-blue#3b82f6Links, wikilinks, internal references
--accent-orange#f59e0bWarnings, pending tasks, attention
--accent-red#ef4444Errors, blocked states, critical issues

Complete Token Table

TokenDefaultCategory
--font-bodyInterTypography
--font-monoJetBrains MonoTypography
--bg-primary#0a0a0aBackground
--bg-secondary#111111Background
--bg-card#0f0f0fBackground
--border-color#262626Border
--border-color-subtle#1a1a1aBorder
--text-primary#e5e5e5Text
--text-secondary#a3a3a3Text
--text-muted#737373Text
--text-dim#525252Text
--accent#22c55eAccent
--accent-blue#3b82f6Accent
--accent-orange#f59e0bAccent
--accent-red#ef4444Accent
--asw-radius-md4pxBorder radius

Creating Custom Themes

Override tokens in a CSS file loaded after agentic.css:

Light Theme Example

/* custom-light.css */
:root {
  --bg-primary:       #ffffff;
  --bg-secondary:     #f5f5f5;
  --bg-card:          #fafafa;

  --border-color:     #e5e5e5;
  --border-color-subtle: #f0f0f0;

  --text-primary:     #171717;
  --text-secondary:   #525252;
  --text-muted:       #a3a3a3;
  --text-dim:         #d4d4d4;

  --accent:           #16a34a;
  --accent-blue:      #2563eb;
  --accent-orange:    #ea580c;
  --accent-red:       #dc2626;
}

Load order matters:


<link rel="stylesheet" href="/assets/agentic.css">
<link rel="stylesheet" href="/assets/custom-light.css">  <!-- Last -->
How it works

Override --asw-* semantic aliases — the values cascade through the framework automatically.

Light/Dark Switching

Via Media Query

:root {
  /* Light defaults */
  --bg-primary: #ffffff;
  --text-primary: #171717;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg-primary: #0a0a0a;
    --text-primary: #e5e5e5;
  }
}

Via Data Attribute Toggle

<html data-theme="dark">
:root { /* light defaults */ }

[data-theme="dark"] {
  --bg-primary: #0a0a0a;
  --text-primary: #e5e5e5;
}

Best Practices

  1. Override at :root level. All tokens are scoped to :root; your overrides should be too.
  2. Use semantic tokens, not Pico variables. Override --accent, not --pico-primary. The mapping handles the rest.
  3. Maintain semantic meaning. If you change --accent-red, it should still mean "error" or "blocked."
  4. Test with data-attributes. After changing tokens, verify [data-task], [data-status], [data-callout] still look correct.
  5. Keep font fallbacks. Always include system fallbacks: --font-body: 'Your Font', system-ui, sans-serif;