Skip to content

Brand Guidelines

Design tokens, typography, color system, and component patterns — the living style guide.

Design Principles

Color System

Built on warm off-whites and a near-black ink scale, with dark amber for interactive elements. Dark mode via @media (prefers-color-scheme: dark) and the .dark class.

Background & Surface

TokenLight valueUsage
--background#fdfcfbPage background
--background-subtle#f9f7f4Alternate section backgrounds, footer
--surface#f2efeaCard / panel background
--surface-raised#e8e4dcInline code, badge backgrounds
--surface-overlayrgba(253,252,251,0.95)Floating overlays, dropdowns

Text

TokenLight valueUsage
--foreground#0c0c0bPrimary body text
--foreground-muted#4a4a45Secondary / metadata text
--foreground-subtle#8c8c84Placeholder / hint / overlines
--foreground-inverse#fdfcfbText on dark backgrounds

Accent (Interactive)

TokenLight valueUsage
--accent#7a5c1eLink hover, focus rings, icon tints
--accent-hover#5c4515Deeper hover state
--accent-subtlergba(122,92,30,0.07)Tinted fills, icon wrappers
--accent-mutedrgba(122,92,30,0.25)Selection highlight, blockquote border

Borders

TokenLight valueUsage
--borderrgba(0,0,0,0.10)Default borders, table rows
--border-strongrgba(0,0,0,0.18)Table headers, dividers
--border-subtlergba(0,0,0,0.06)Extremely subtle separators

Dark Mode

Dark mode tokens are automatically applied via @media (prefers-color-scheme: dark). Manual override available with the .dark class on <html>. Accent color shifts to a lighter amber (#c9a96e) for visibility against dark backgrounds.

Typography

Inter-only for all text, with Geist Mono reserved for code. This matches Stripe, Vercel, Linear, and GitHub Docs — where readability and information density take precedence over personality.

Font Families

RoleFontVariableUsage
Sans-serifInter--font-sansAll UI, headings, body text
Serif(alias to Inter)--font-serifCompatibility alias only
Display(alias to Inter)--font-displayCompatibility alias only
MonoGeist Mono--font-monoCode blocks, inline code, keyboard shortcuts

Type Scale

TokenSizeTailwindUsage
--text-xs12pxtext-xsLabels, tags, overlines
--text-sm14pxtext-smCaptions, metadata, table cells
--text-base16pxtext-baseBody text (default)
--text-lg18pxtext-lgLead paragraphs, blockquotes
--text-xl20pxtext-xlh5, card titles
--text-2xl24pxtext-2xlh3, h4
--text-3xl30pxtext-3xlh2
--text-4xl36pxtext-4xlh1
--text-5xl48pxtext-5xlHero display
--text-6xl60pxtext-6xlMax display

Weight Usage

WeightTailwindUsage
300font-lightSubtle large display text
400font-normalBody text
500font-mediumActive nav, secondary headings
600font-semiboldSection labels, overlines
700font-boldAll headings, card titles

Line Height

TokenValueUsage
--leading-tight1.2All headings
--leading-snug1.35Sub-headings
--leading-normal1.5UI text
--leading-relaxed1.7Body prose (default)
--leading-loose2.0Spacious display contexts

Letter Spacing

TokenValueUsage
--tracking-tight−0.025emLarge headings
--tracking-normal0emDefault
--tracking-wide0.04emSub-labels
--tracking-wider0.08emOverlines, table headers
--tracking-widest0.14emAll-caps badges

Spacing Scale

Based on a 4px base unit. All steps 1–64 defined as --space-* tokens and Tailwind utilities (e.g. p-4, mt-8).

TokenValue
--space-14px
--space-28px
--space-416px
--space-624px
--space-832px
--space-1248px
--space-1664px
--space-2496px
--space-32128px

Borders & Radius

Radii are minimal — the design is editorial and flat, not card-heavy or app-like.

TokenValueUsage
--radius-sm2pxInline code, badges
--radius-md3pxCards, callouts
--radius-lg4pxCode blocks
--radius-xl6pxLarger panels
--radius-2xl8pxFeature blocks
--radius-full9999pxPills, avatars

Shadows

Shadows are subtle and used only where elevation is semantically meaningful.

TokenUsage
--shadow-xsFocus highlights, tight inset
--shadow-smCard hover, dropdown menus
--shadow-mdModals, floating panels
--shadow-lgNavigation drawers
--shadow-xlFull-screen overlays

Transitions

TokenDurationUsage
--transition-fast150ms easeHover color changes
--transition-base200ms easeDefault interactive transitions
--transition-slow300ms easePanel expand / collapse
--transition-colors150ms (multi)color, background-color, border-color, opacity

Components

CalloutBox

Use callouts to break out critical information from the main prose flow. One callout per major section maximum; keep body text to 1–3 sentences. Do not use for decorative emphasis.

Layout Tokens

TokenValueUsage
--max-width-prose68ch.prose element max-width — constrains the reading column
--max-width-narrow52remPage shell container — content pages
--max-width-content76remFull site container — nav, footer, index pages

Z-index Scale

TokenValueUsage
--z-base0Default stacking
--z-raised10Slightly elevated elements
--z-dropdown100Dropdown menus
--z-sticky200Sticky navigation
--z-overlay300Backdrop overlays
--z-modal400Modal dialogs
--z-tooltip500Tooltips, popovers
--z-toast600Toast notifications

Accessibility

Usage Rules

  1. Always use semantic tokens, not primitive color values, in component CSS.
  2. All text uses Inter — var(--font-sans). Never load or apply a serif for headings or body.
  3. Code uses Geist Mono — var(--font-mono). Use it only for code, pre, kbd.
  4. Links are near-black ink with underlines by default. On hover they shift to dark amber. Do not use blue anywhere.
  5. Borders are transparent black overlays on the light ground — never opaque grays.
  6. Minimal radii. Avoid large rounded corners. Max is --radius-2xl (8px).
  7. No decorative shadows. Rely on borders and background contrast for separation.
  8. Spacing is in multiples of 4px. Use --space-* tokens or Tailwind utilities; avoid arbitrary pixel values.
  9. Prose stays at 68ch max. Never let reading content span the full viewport.
  10. Dark mode is supported. Test all new components in dark mode before shipping.

This page is for contributors and maintainers. About Resilient Comms →