Turbo Puffin DS
Theme
Tokens

Colors

All color values are exposed as CSS custom properties and respond to the active theme and mode. Switch themes above to preview each palette.

Base Palette
--bg
Background
--surface
Surface
--surface-2
Surface 2
--border
Border
--text
Text
--muted
Muted
--dim
Dim
Accent & Semantic
--accent
Primary accent
--accent-light
Accent light
--accent-dim
Accent dim
--success
Success
--danger
Danger
--warning
Warning
--info
Info
css
/* Reference any color token */
background: var(--accent);
color: var(--text);
border-color: var(--border);
Tokens

Typography

Type scale from 12px to 56px. Minimum visible text is 13px. All sizes use 4px-grid-aligned line heights.

Type Scale
5xl / 56px
Display
4xl / 42px
Heading 1
3xl / 32px
Heading 2
2xl / 26px
Heading 3
xl / 20px
Heading 4
lg / 17px
Large body — used for introductory paragraphs and lead copy.
base / 15px
Body text — the workhorse of the scale. Used for most paragraph content.
sm / 13px
Small text — captions, metadata, secondary labels. Minimum for readable text.
xs / 12px
Extra small — overline labels only. Never use for body copy.
Weight Variants
Light 300 — Turbo Puffin Design System
Regular 400 — Turbo Puffin Design System
Medium 500 — Turbo Puffin Design System
Semibold 600 — Turbo Puffin Design System
Bold 700 — Turbo Puffin Design System
Extrabold 800 — Turbo Puffin Design System
Font Families
--font-heading
The quick brown fox jumps over the lazy dog
--font-body
The quick brown fox jumps over the lazy dog
--font-mono
const quickBrownFox = () => lazyDog();
Letter Spacing
Tight tracking — -0.02em — Display headlines
Normal tracking — 0em — Body text default
Wide tracking — 0.03em — Subtle emphasis
Caps tracking — 0.08em — OVERLINE LABELS
Tokens

Spacing

All spacing is based on a 4px grid. Use these tokens for padding, margin, and gap throughout the system.

Spacing Scale
--tp-space-1
4px
--tp-space-2
8px
--tp-space-3
12px
--tp-space-4
16px
--tp-space-5
20px
--tp-space-6
24px
--tp-space-8
32px
--tp-space-10
40px
--tp-space-12
48px
--tp-space-14
56px
--tp-space-16
64px
--tp-space-20
80px
--tp-space-24
96px
--tp-space-32
128px
Components

Buttons

Buttons communicate actions. Use primary for the single most important action, secondary for supporting actions, ghost for low-emphasis, and danger for destructive operations.

Variants
Sizes
States
Button Group
html
<button class="btn btn-primary btn-md">Primary</button>
<button class="btn btn-secondary btn-sm">Secondary</button>
<button class="btn btn-danger btn-lg">Delete</button>
<button class="btn btn-primary btn-md btn-loading" aria-label="Loading"></button>
Components

Inputs

Form controls for collecting user input. All inputs share consistent sizing, focus rings, and error states.

Text Input States
Must be 3–20 characters.
This field cannot be changed.
Please enter a valid email address.
Select & Textarea
Maximum 500 characters.
Checkbox & Radio
Toggle
html
<div class="field">
  <label class="field-label" for="email">Email</label>
  <input class="input" id="email" type="email">
  <span class="field-hint">We won't share your email.</span>
</div>
Components

Cards

Cards group related content and actions. Use raised for emphasis, clickable for interactive cards.

Base Card
Getting Started
5 minute read

Learn how to integrate Turbo Puffin into your project. Install the package, apply a theme, and start using components immediately.

Card with Header / Body / Footer
User Profile
Last updated 2 hours ago

Manages authentication credentials, display preferences, and notification settings for this account.

Stat Cards
Monthly Revenue
$48,290
↑ 12.4% vs last month
Active Users
3,847
↑ 8.1% vs last month
Churn Rate
2.3%
↑ 0.4% vs last month
Clickable Card (hover for effect)
Documentation

Browse the full component reference, design tokens, and integration guides.

Changelog

Track breaking changes, new features, and bug fixes across every release.

Components

Tables

Data tables for displaying structured information. Supports sorting, striped rows, and compact density.

Standard Table
Name Status Role Last Active Actions
Astrid Nilsson Active Admin 2 min ago
Marcus Chen Active Editor 1 hour ago
Priya Sharma Invited Viewer Never
James O'Brien Inactive Editor 14 days ago
Yuki Tanaka Suspended Viewer 30 days ago
Striped + Compact Variant
Token Value Category
--tp-space-416pxSpacing
--tp-text-base15pxTypography
--accentTheme-relativeColor
--radius-full9999pxShape
--font-headingTheme-relativeTypography
Components

Badges

Labels for conveying status, counts, and categorical metadata inline with content.

Semantic Variants — Medium
Accent Success Warning Danger Info Neutral
Sizes
Small Medium Large
Outline Variants
Accent Success Danger
Pill Badges
New Approved Pending Rejected
Status Dots
Online Away Error Offline
Count Badge & Dot Badge
3 12 99+
Components

Alerts

Contextual feedback messages for system states, warnings, and user actions.

Default Alerts
Version 2.4 released
New token aliases and component variants are now available. See the changelog for full details.
Deployment successful
Your changes are live. It may take up to 60 seconds to propagate globally.
API rate limit approaching
You have used 87% of your monthly API quota. Upgrade your plan to avoid interruptions.
Authentication failed
Your session has expired. Please sign in again to continue.
Filled Variants
Maintenance window
Scheduled downtime on March 15 from 02:00–04:00 UTC.
Payment confirmed
Invoice #INV-2842 has been processed successfully.
Storage nearly full
You are using 94% of your 10 GB storage allowance.
Critical error
Database connection lost. Operations may be degraded.
Toast Notification
Profile saved successfully.
Components

Modals

Dialogs for focused tasks that require user attention. Press Escape or click the overlay to close.

Modal Triggers
html
<div class="modal-overlay" id="my-modal">
  <div class="modal modal-md">
    <div class="modal-header">
      <h2 class="modal-title">Title</h2>
      <button class="modal-close" onclick="closeModal('my-modal')">×</button>
    </div>
    <div class="modal-body">Content</div>
    <div class="modal-footer">
      <button class="btn btn-primary btn-md">Confirm</button>
    </div>
  </div>
</div>
Components

Skeletons

Loading placeholders that mimic the layout of content being fetched. Reduces perceived loading time.

Skeleton Card
Skeleton Table Rows
Skeleton Stat Cards
Components

Empty States

Placeholder UI for when content is absent. Guide users toward the next meaningful action.

Default Empty State
📭
No projects yet
Create your first project to start organizing your work and collaborating with your team.
No Results
🔍
No results found
Try adjusting your search query or clearing your filters to find what you're looking for.
Error Variant
⚠️
Failed to load data
Something went wrong while fetching this content. Check your connection and try again.
Small Variant (inline)
📋
No comments
Be the first to leave a comment on this item.
Components

Code

Inline code, code blocks, and keyboard shortcut keys for technical documentation.

Inline Code

Use the var(--accent) token for interactive elements. Apply data-theme and data-mode to the root <html> element to activate a theme.

Code Block with Copy Button
javascript
// Apply a theme programmatically
function applyTheme(theme, mode) {
  const root = document.documentElement;
  root.setAttribute('data-theme', theme);
  root.setAttribute('data-mode', mode);
  localStorage.setItem('tp-theme', theme);
  localStorage.setItem('tp-mode', mode);
}

applyTheme('frost', 'dark');
Code Fence
npm install @turbopuffin/design-system

# or with yarn
yarn add @turbopuffin/design-system
Keyboard Keys

Press + K to open the command palette. Use to navigate, Enter to select, and Escape to dismiss.

Components

Hero

Full-width page openers. Six layout variants — default solid, background image, accent overlay, split, stacked, and logo. All variants accept eyebrow, heading, subtext, CTA, and meta subcomponents.

Default — Solid

Left-aligned text on surface background. The baseline hero: no image, no frills.

New release

The tools you need,
none of the noise.

A privacy-first analytics platform built for teams that care about performance without the surveillance overhead.

html
<div class="tp-hero">
  <div class="tp-hero__inner">
    <span class="tp-hero__eyebrow">New release</span>
    <h1 class="tp-hero__heading">The tools you need, none of the noise.</h1>
    <p class="tp-hero__subtext">Supporting description text here.</p>
    <div class="tp-hero__cta">
      <button class="tp-btn tp-btn--primary tp-btn--md">Get started free</button>
      <button class="tp-btn tp-btn--ghost tp-btn--md">View demo</button>
    </div>
  </div>
</div>
Background Image

Full-bleed photo behind content. Pass --hero-bg: url(...) via inline style. A dark overlay is applied automatically.

Introducing v2.0

Built for the way
you actually work.

Ship faster with tooling that gets out of your way. Real-time data, zero config.

html
<div class="tp-hero tp-hero--image tp-hero--tall"
     style="--hero-bg: url('/your-image.jpg')">
  <div class="tp-hero__overlay"></div>
  <div class="tp-hero__inner">
    <span class="tp-hero__eyebrow">Introducing v2.0</span>
    <h1 class="tp-hero__heading">Built for the way you actually work.</h1>
    <p class="tp-hero__subtext"></p>
    <div class="tp-hero__cta"></div>
  </div>
</div>
Overlay — Accent Gradient

Ambient accent-colored radial gradients in the background. No photo required — works purely with theme tokens. Great for product announcements.

✦ Now in public beta

Analytics that respects
your users' privacy.

Lightweight, cookieless, GDPR-native. Drop in one script tag and start understanding your traffic in minutes.

Trusted by 1,200+ sites
html
<div class="tp-hero tp-hero--overlay tp-hero--centered">
  <div class="tp-hero__inner">
    <span class="tp-hero__badge">✦ Now in public beta</span>
    <h1 class="tp-hero__heading"></h1>
    <p class="tp-hero__subtext"></p>
    <div class="tp-hero__cta"></div>
  </div>
</div>
Split — Text + Media

Two-column layout: text on the left, image/screenshot/visual on the right. Add .tp-hero--split-reverse to flip the order.

Product tour

See every visitor.
No cookies needed.

A clean dashboard that shows you what matters: pageviews, referrers, top pages — without a consent banner in sight.

Pageviews
48,210
Visitors
12,884
Bounce rate
38%
Avg. duration
2m 14s
html
<div class="tp-hero tp-hero--split">   <!-- or tp-hero--split-reverse -->
  <div class="tp-hero__inner">
    <div class="tp-hero__content">
      <span class="tp-hero__eyebrow">Product tour</span>
      <h1 class="tp-hero__heading"></h1>
      <p class="tp-hero__subtext"></p>
      <div class="tp-hero__cta"></div>
    </div>
    <div class="tp-hero__media">
      <!-- screenshot, illustration, or video -->
      <img src="..." alt="..." style="width:100%;height:100%;object-fit:cover;" />
    </div>
  </div>
</div>
Stacked — Text + App Preview

Centered text block above a full-width product screenshot or UI preview. The media card bleeds to the bottom edge — works great as a page opener.

Now available

Analytics for the cookieless web.

Measure traffic, understand your audience, and grow your site — without invading anyone's privacy.

[ chart area ]
html
<div class="tp-hero tp-hero--stacked">
  <div class="tp-hero__inner">
    <div class="tp-hero__content">
      <span class="tp-hero__eyebrow">Now available</span>
      <h1 class="tp-hero__heading"></h1>
      <p class="tp-hero__subtext"></p>
      <div class="tp-hero__cta"></div>
    </div>
    <div class="tp-hero__media">
      <!-- full-width screenshot -->
      <img src="..." alt="App preview" style="width:100%;height:100%;object-fit:cover;object-position:top;" />
    </div>
  </div>
</div>
Logo — Brand / Product Launch

Centered logo mark above headline. Use for product launches, landing pages, or app homescreens where the brand itself is the hero.

html
<div class="tp-hero tp-hero--logo tp-hero--centered">
  <div class="tp-hero__inner">
    <div class="tp-hero__logo-mark">
      <!-- your logo SVG or img -->
    </div>
    <h1 class="tp-hero__heading">Product Name</h1>
    <p class="tp-hero__subtext"></p>
    <div class="tp-hero__cta"></div>
  </div>
</div>
Size Modifiers
Compact (48px vertical)
Interior page

Compact hero — for interior pages

Reduced padding for secondary pages where the hero shouldn't dominate the layout.

Tall (140px vertical)
Landing page

Tall hero — maximum impact

Extended padding for homepage openers where you want the hero to breathe.

Class Reference
ClassDescription
.tp-heroBase — solid surface bg, left-aligned
.tp-hero--centeredCenter-aligns all content
.tp-hero--imageFull-bleed bg photo via --hero-bg: url(...)
.tp-hero--overlayAccent radial gradient wash — no photo needed
.tp-hero--splitTwo-column: text left, media right
.tp-hero--split-reverseTwo-column: media left, text right
.tp-hero--stackedCentered text above full-width media card
.tp-hero--logoCentered logo mark + headline for brand pages
.tp-hero--compact48px vertical padding (interior pages)
.tp-hero--tall140px vertical padding (homepage openers)