Developer preview · design tokens
Next SST Template
This page verifies that fluid typography, colors, spacing, and feedback components resolve correctly. Resize the browser to see values change; click the toast buttons to preview live notifications.
How to use this page
- Resize the window — fluid type and spacing should scale smoothly.
- Compare the hierarchy block — Display should be largest, then Hero, Heading, Subheading.
- Click the toast buttons — live Sonner toasts (including auto-dismiss demo).
- Landscape — wider than tall; narrow-band xs-lds / sm-lds pills when applicable.
- Global CSS utilities — scroll hide, shake, loading bars, sparkles (section below).
- Viewport height — drag the bottom of the browser window to see the fluidVH bar grow.
- Dark mode — switch OS appearance (light/dark); tokens follow automatically.
- Remove this page when real UI replaces it.
What's covered
Included on this page
- All 17 typography roles + 6 compact heading overrides
- Semantic + toast + error colors
- Spacing scales (all 6) + padding
- Spinner (inline sm/md/lg + overlay demo) + live Sonner toasts + dismissInfoToast
- globals.css utilities + landscape / xs-lds / sm-lds + fluidVH
Global CSS utilities
Classes from globals.css — font helpers, scrollbar hide, shake, and loading/sparkle animations.
Font weight helpers
font-template-sans-normal (400)
font-template-sans-medium (500)
font-template-sans-semibold (600)
font-template-sans-bold (700)
hide-scrollbar
shake
Validation field (shakes on click)
animate-account-loading-bar
animate-welcome-progress
60s loop — watch the bar fill slowly.
Sparkles
Landscape
This box reacts to viewport shape: taller than wide = portrait, wider than tall = landscape. Resize the window, pick a device in DevTools, or rotate a phone — same rule everywhere.
Portrait — taller than wide
Landscape — wider than tall
Green pills = active band. Width: xs-lds 320–639px, sm-lds 640–767px. Shape: landscape orientation or aspect ≥ 4/3 (same rule as globals.css).
Viewport height (fluidVH)
Drag the bottom of the browser window (not just the responsive frame width). Bar height scales with 100vh via fluidVH().
Viewport height: … · Range 320–900px height → 40–240px bar
Type hierarchy (largest → smallest)
At your current width, the largest line should be Display, then Hero, then Heading, then Subheading.
Display — page marketing headline
Hero — primary hero headline
Heading — section title (h1/h2)
Subheading — section subtitle
Typography (all roles)
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
Compact headings (nav / menus)
Larger heading styles used on smaller breakpoints — common for nav labels and mobile menu CTAs.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
The quick brown fox jumps.
Colors
Semantic tokens from CSS variables (injected via @template/shared/tokens). Dark mode: use your OS appearance setting — there is no in-app toggle yet.
Error surface
error-surface, error-border, error-text*
Toasts (Sonner)
Click a button below — a live toast appears in the corner (same as production).
Static cards below show the CSS variable colors — the buttons above trigger live toasts.
Success (static)
toast-success-* colors
Info (static)
toast-info-* colors
Error (static)
toast-destructive-* colors
Spinner
Production LoadingSpinner — sm, md (with label), lg; button below previews overlay mode.
Loading…
Spacing & padding
Each row demonstrates one scale. The gray area should grow or spread as you resize — that is the fluid spacing working. Layout differs per scale on purpose (padding vs gap).
container
Inner padding (p-template-*-container)
section
Vertical section rhythm (py-template-*-section)
component
Padding around components (p-template-*-component)
button
Horizontal button padding (px-template-*-button)
form
Gap between fields (gap-template-*-form)
nav
Nav item padding (px-template-*-nav)
Height — button & input
Use min-h-* when text may wrap; h-* for single-line controls.
Animations
Loading dots loop automatically. Use Replay fade-in or hover the wiggle button to preview micro-interactions.
Loading indicators
Micro-interactions
animate-wiggle is ±0.15°