273 tokens across shared, dark, and light layers. One JSON file drives every color, font, and spacing value.
The source of truth is signalwire-tokens.dtcg.json, a W3C Design Tokens Community Group file. Every color, font, spacing value, and component style derives from that file.
Three layers: shared (brand, typography, spacing), dark (surfaces, foreground, borders), and light (same structure, different values). Change a token, rebuild, and every surface updates.
W3C DTCG token file. Single source of truth for all design values.
→ signalwire-system.cssGenerated CSS custom properties. Token variables for dark and light themes.
→ signalwire-roles.cssComponent role mappings. Maps UI elements to the correct tokens.
→ signalwire-daisyui-theme.cssDaisyUI 5 theme generated from tokens.
→ Logo (white text)Full logo for dark backgrounds.
→ Logo (black text)Full logo for light backgrounds.
→ Logo (brackets)Bracket mark for favicons and compact use.
→--fg-default, --fg-secondary, --fg-muted, --fg-headings--bg-page, --bg-surface, --bg-surface-raised--border-default, --border-strong--sw-blue, --sw-fuchsia, --sw-turquoise, --sw-gold--tok-keyword, --tok-string, --tok-function, --tok-comment--type-family-heading, --type-family-body, --type-size-h160% neutral surfaces and headings. 30% secondary text and surface alternation. 10% accent.
Headings are neutral (#f0f0f4 dark, #070c2d light). Typography carries hierarchy through size, weight, and font family.
Fuchsia is the single accent for stats, eyebrows, links, buttons, and tab indicators. Blue is structural (borders, step numbers). Turquoise is semantic positive only (checkmarks). Gold is warnings only.
The subtitle elaborates on the headline in one or two sentences without repeating it.
Body copy is set in Lexend at 1rem with a 1.7 line-height. Designed for readability across long-form content. The accent color is reserved for emphasis: specific terms, links, and inline code.
Reach for inline_code for short identifiers inside a sentence.
const greet = (name) => `hello, ${name}`;Use one callout per screen, two max. Each style maps to a specific intent. Don't repurpose colors. The style names below match the style field in the section JSON.
Design for dark, adapt for light. Not an inversion.
Base styles for phones, min-width queries for desktop.
Minimum on mobile. No hover-only interactions.
Raised background + inset highlight + depth shadow. No colored borders. Hover reveals fuchsia glow.
Terminal-style window with title bar, traffic light dots, and copy button. Dark in both themes.
One per screen, two max. Info (blue), warning (gold), danger (fuchsia), success (green).
from signalwire_agents import AgentBase
agent = AgentBase(name="receptionist")
agent.prompt_add_section("role",
body="You are a receptionist. Route calls.")
agent.run()
Add a pattern class to any container: <div class="sw-bg-dots">. The pattern renders via a ::after pseudo-element so it layers behind content.
In landing page JSON, add "bg": "dots" to any section. The builder injects the class automatically.
Patterns work on sections, cards, hero areas, or full pages. Combine with surface colors for depth.
Trusted by 2,700+ companies
Download the DTCG tokens and build on the SignalWire design system.