Surface
Porcelain in light mode, charcoal in dark. A fine edge and soft depth; no gold outlines.
Quiet surfaces. Useful details. One language, in light and dark.
Explore the design rulesColor, type, surfaces and spacing.
Let content lead. Keep the container quiet and the details useful.
Porcelain in light mode, charcoal in dark. A fine edge and soft depth; no gold outlines.
24px cards · 20px padding · 16px gaps. Nested images use 12px corners; inputs remain 8px.
14px card content · 12px metadata · 32px key numbers. Sans-serif for UI; serif only for notes and the wordmark.
One purpose per card. Align headings and footers; vary the interior for lists, images, numbers and notes.
160ms feedback, 240ms content replacement. Keep geometry stable; every action has a visible result.
Three columns when space allows, two on medium screens, one on mobile. Themes keep identical geometry.
Neutral backgrounds. Gold accents. Separate colors for status.
--canvas#F7F7F5 / #141517--surface#FFFFFF / #202123--ink#222525 / #F2F2EC--accent#81602D / #DCB87ASans-serif for headings, content and controls. Reserve editorial serif for short notes and the wordmark.
Make room for the work.
App UI: Inter / PingFang, 32–12px below. Guide chapter headings: 28px. Brand display: Playfair / Songti; wordmark: Cormorant.
--type-title32px / 600 / 1.2--type-section24px / 600 / 1.3--type-reading16px / 400 / 1.7--type-ui14px / 500 / 1.5--type-meta12px / 400 / 1.5Size / weight / line height. Keep Chinese tracking natural; align data with tabular numbers.
Text ≥ 4.5:1. Large text and essential control boundaries ≥ 3:1. Check both themes.
--ink / --canvas—--muted / --surface—--accent / --canvas—--field-line / --surface—Field focus: a neutral 2px edge; other controls keep a visible keyboard outline. Status always includes a label. Glass needs a separate check over its actual background.
Quiet solid surfaces. Soft card edges; clear boundaries for inputs.
A quiet card on the canvas. Use the same surface in forms, lists and modules.
4px grid · 8px fields · 24px cards · 16px gaps.
48121624324864Try the controls below.
One shared shell, different content. Try the period selector, inbox, note, images, timer and checklist.

Sonoma County, CA
24,680 USD
Leave room for the unexpected.
19:30
Sunset at the coast
3.1 km

25:00
One primary action per group.
One primitive across default, filled, invalid, disabled and read-only states. Tab through available fields to compare focus.
Choose a view to change the module below. Keep the label visible.
Summary view selected.
44px minimum height · 16px field text · 8px corners. Arrow keys browse; Enter selects; Escape closes. Searchable comboboxes and action menus need separate patterns.
Keep the card in place. Explain what happened and offer one next step.
Your weekly overview is ready to explore.
Module ready
Local simulation · retry returns sample content.
480px maximum width · 20px padding · 24px corners. One clear decision.
Focus stays inside. Escape or Cancel closes and returns focus. Open: 280ms. Close: 160ms. Reduced motion: instant.
Edit a draft, then apply it. The table changes only after a successful save.
| Item | Status | Updated |
|---|---|---|
| Color | Ready | 9 Sept 2026 |
| Typography | Ready | 9 Sept 2026 |
| Surfaces | Draft | 9 Sept 2026 |
Choose a layout for the task.
Fluid at 1440px; capped at 1600px on larger viewports. The shell includes a 240px sidebar and gutters. Reading, forms and modules stay narrower.
68ch400px1600px360px480px| Viewport | Gutter | Behavior |
|---|---|---|
| ≤ 680px | 20px | One column; navigation in a drawer; modules below content or a dedicated view. |
| 681–1199px | 24px | Two columns when space permits; collapse optional context. |
| ≥ 1200px | 32px | Persistent navigation; 360px side module; main area flexes. |
Cards: minimum 240px. Long tables scroll inside their own region. Check 320px, 390px, 768px and 1440px, plus 200% zoom.
Review the typography and spacing before sharing.
Resize the browser or use split view. The same content keeps its reading order.
Review the typography and spacing before sharing.
Resize the browser or use split view. The same content keeps its reading order.
Try each transition.
| Use | Timing | Properties |
|---|---|---|
| Feedback / overlay exit | 160ms | --duration-feedback |
| Navigation drawer | 200ms | --duration-navigation |
| Content replacement | 240ms | --duration-replace |
| Font preview | 360ms | --duration-font |
| Panel entrance | 280ms | opacity + translateY(10px → 0) |
| Theme | 700ms | One page crossfade |
Finish exactly at the resting state. Never animate font size, weight or container height for feedback. Reduced motion switches instantly. Rapid input must settle on the latest choice.
700ms fade. Follows the system until you choose a theme.
160ms feedback · 280ms entrance.
Fade in and settle.
Your workspace is up to date.
Defaults for new web apps.
Locale routes. Server reads. Client interactions. Secrets stay on the server.
Translate every state. Switching language keeps the current page.
OS default, saved choice and reduced motion. Use shared tokens.
Supabase today. Zillion Account integration later. Verify access on the server.
Handle loading, empty, success and failure. Preserve unsaved work.
Check both languages/themes, keyboard access, contrast, mobile and the build.
Run the settings example, then copy the same primitives and setup. Tokens alone do not include fonts or application behavior.
// app/layout.tsx imports in order
import './tokens.css';
import './primitives.css';
// app/[lang]/layout.tsx
// Validate en/zh; load local fonts; set html lang.
// Apply stored theme before paint; wrap ThemeProvider.
// Native controls use shared classes
<input className="field" aria-invalid={hasError} />
<button className="button primary">Save</button>
// Runnable source: src/app/[lang]/starter/page.tsx
// Interaction: src/components/SettingsExample.tsxSee docs/adoption.md for the file manifest, state contract and version pinning. No authentication or persistence is implied.
Versioned tokens. Pin the release you adopt.
Changes and adoption.
Current preview
Porcelain and charcoal themes, content-led modules and working examples. Card radius is now 24px; adopt matching tokens and primitive styles.
Features and breaking changes: minor. Fixes: patch. Include migration notes for breaking changes.
Major: breaking. Minor: additions. Patch: fixes.
Pin a reviewed release. Migrate each product explicitly.
Match package, changelog and tokens. Released tags are immutable.