Paycraft Design System
Comprehensive reference extracted from . Covers the marketing website, dashboard/app, Paycraft Elements, and documentation patterns.
Website Colors
Paycraft's brushwork is anchored by a deep navy (#0a2540) and a vibrant purple accent (#533afd). The system uses subtle gray backgrounds and a sophisticated shadow brushwork with rgba(50,50,93) as the signature shadow color.
Primary & Accent
Navy Scale
Text Colors
Backgrounds
Borders
Semantic Colors
Gradients
Paycraft uses multicolor gradients extensively, especially for product suite differentiation and hero backgrounds. Their signature shadow color rgba(50,50,93) appears in every shadow definition.
Product Suite Colors
Each Paycraft product suite has a distinct gradient identity used in the navigation menu, product pages, and marketing materials.
Typography
Paycraft uses their custom variable font "sohne-var" (weight range 1-1000) with a restrained weight scale: 200 (light), 300 (normal), 425 (semibold), 500 (bold). The monospace font is SourceCodePro.
| Token | Value | Usage |
|---|---|---|
--fontFamily | "sohne-var", "Helvetica Neue", Arial, sans-serif | All text |
--fontWeightLight | 200 | Decorative, large display |
--fontWeightNormal | 300 | Body text, descriptions |
--fontWeightSemibold | 425 | CTAs, labels, nav items |
--fontWeightBold | 500 | Headings, emphasis |
Spacing Scale
Paycraft uses a 4px base unit with a scale that expands to 128px for section-level spacing. Row gaps and section padding use CSS custom properties with responsive fluid calculations.
| CSS Variable | Value | Usage |
|---|---|---|
--rowGapXSmall | 16px | Tight element spacing |
--rowGapSmall | 24px | Related elements |
--rowGapNormal | 32px | Standard content gaps |
--rowGapMedium | 48px | Content group separation |
--rowGapLarge | 64px | Section-level on desktop |
--rowGapXLarge | 96px | Major section breaks |
--sectionPaddingMin | 72px | Min section padding (fluid) |
--sectionPaddingMax | 128px | Max section padding (fluid) |
--columnGap | 20px | Grid column gutter |
Shadow System
Paycraft's signature shadow uses rgba(50,50,93) -- a muted paycraft-gray that complements their navy brushwork. Each shadow uses two layers: the primary spread and a darker, tighter secondary shadow.
| Token | Value |
|---|---|
--cardShadowXSmall | 0 2px 5px -1px rgba(50,50,93,0.25), 0 1px 3px -1px rgba(0,0,0,0.3) |
--cardShadowSmall | 0 6px 12px -2px rgba(50,50,93,0.25), 0 3px 7px -3px rgba(0,0,0,0.3) |
--cardShadowMedium | 0 13px 27px -5px rgba(50,50,93,0.25), 0 8px 16px -8px rgba(0,0,0,0.3) |
--cardShadowLarge | 0 30px 60px -12px rgba(50,50,93,0.25), 0 18px 36px -18px rgba(0,0,0,0.3) |
--cardShadowXLarge | 0 50px 100px -20px rgba(50,50,93,0.25), 0 30px 60px -30px rgba(0,0,0,0.3) |
Border Radius
Buttons
Paycraft buttons use a 16.5px pill border-radius, 15px font at semibold (425) weight. The primary variant uses #635bff (Paycraft purple-blue), while the dark variant uses #0a2540 navy.
Primary Variants
Secondary Variants
Segmented Control
| Property | Value |
|---|---|
| Border Radius | 16.5px (pill) |
| Padding | 3px 16px 6px |
| Font | 425 15px/1.6 var(--fontFamily) |
| Primary BG | #635bff |
| Primary Hover | #031323 |
| Accent BG | #533afd |
| Segmented Active | #533afd bg, #fff text |
Cards
Cards use 8px border-radius and Paycraft's layered shadow system. Variants include bordered, shadowed, and accented (colored top border).
Angled Sections
Paycraft's signature angled section backgrounds use CSS skewY transforms. The normal angle is -6deg and the strong angle is -12deg.
Angled Section (-6deg)
Background uses transform: skewY(var(--sectionAngle)) with the content remaining upright.
| Token | Value |
|---|---|
--angleNormal | -6deg (sin: 0.106) |
--angleStrong | -12deg (sin: 0.212) |
| Transform | skewY(var(--sectionAngle)) |
| Applied to | .Section__background |
Blog Components
The future of internet payments
A look at how the global payments landscape is evolving and what it means for businesses building on the internet.
| Property | Value |
|---|---|
| Card Shadow | var(--cardShadowXLarge) |
| Title Size | 38px/48px, fw-500, -0.2px spacing |
| Author Font | 15px/1.6, fw-425, #0a2540 |
| Date Font | 15px/1.6, fw-300, #425466 |
| Date Separator | 1px wide, var(--accentColor) |
| Avatar | border-radius: 50%, margin-right: 16px |
Pricing Cards
| Property | Value |
|---|---|
| Price Font | 26px/1.38, fw-500 |
| Suffix Font | 15px/1.5, fw-300 |
| Subcard BG | var(--subcardBackground) (usually #f8fafd) |
| Subcard Radius | 4px |
| Subcard Padding | 12px var(--columnPaddingNormal) |
| Min Height | 120px |
| Hero Nav | border-radius: 99px, height: 50px |
Animations & Easing
Paycraft uses six distinct easing curves for different interaction contexts. Hover over each demo to see the easing in action.
| Duration Token | Value | Usage |
|---|---|---|
--dur-fast | 150ms | Hover effects, micro-interactions |
--dur-medium | 240ms | Mobile menu transitions |
--dur-normal | 250ms | Standard transitions, menus |
--dur-slow | 500ms | Page-level animations |
| (entrance) | 1500-2000ms | Hero graphic animations, stroke reveals |
Code Blocks
Code snippets use the navy (#0a2540) background with SourceCodePro font at 14px/1.714 line-height.
Chat Button
Fixed bottom-right at 24px offset, 64px diameter circle with navy background and typing indicator animation.
Position: fixed, right: 24px, bottom: 24px
Size: 64px × 64px, border-radius: 50%
Background: #0a2540, z-index: 99
Animation: 0.2s cubic-bezier(0.16, 1, 0.3, 1)
Hover Arrow
Paycraft's signature CTA arrow animates 3px to the right on hover with a 150ms cubic-bezier transition.
| Property | Value |
|---|---|
| Arrow Spacing | 5px (margin-left) |
| Hover Offset | translateX(3px) |
| Transition | 150ms cubic-bezier(0.215, 0.61, 0.355, 1) |
| Stroke Width | 2px |
| Fill | none, stroke: currentColor |
Dashboard Colors
The Paycraft Dashboard uses a different brushwork from the marketing site -- system fonts, a lighter blue accent (#5469d4), and a cool gray background (#e6ebf1).
Login Card (Dashboard)
The login page features a centered card on a cool gray background. Uses system fonts, not sohne-var.
| Property | Value |
|---|---|
| Page BG | #e6ebf1 |
| Card Max Width | 480px |
| Card Border Radius | 4px |
| Card Padding | 48px |
| Card Shadow | 0 7px 14px 0 rgba(60,66,87,0.1), 0 3px 6px 0 rgba(0,0,0,0.07) |
| Font Family | -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Ubuntu, sans-serif |
| Title | 16px, fw-500, lh-24px |
| Body | 14px, fw-400, lh-20px |
| Link Color | #5469d4 |
Form Fields
| Property | Value |
|---|---|
| Height | 38px |
| Padding | 0 12px |
| Border | 1px solid #e6ebf1 |
| Border Radius | 6px |
| Font Size | 14px |
| Placeholder | #8f9cb2 |
| Focus Border | #5469d4 |
| Focus Shadow | 0 0 0 2px rgba(84,105,212,0.3) |
| Error Border | #ff5996 |
| Error Shadow | 0 0 0 2px rgba(255,89,150,0.3) |
Paycraft Elements
Pre-built payment UI components with configurable themes. The default form uses a 384px max-width container with grouped fields sharing borders.
Elements Themes
Paycraft Elements supports multiple visual themes. Each can override colors, fonts, and border treatments.
#e6ebf1
#0a2540
#fff
sohne-var font, white background, navy button
#e3f5ff
#00b2ff
#007aae
Light blue bg, cyan borders, teal labels
#afabff
#fab000
#0a2540
Purple bg, gold borders, navy text
transparent
#0de4e4
Roboto Mono font, transparent bg, cyan glow
CSS Variables Reference
Class Naming Convention
Paycraft uses a BEM-adjacent naming system with double underscores for elements, double dashes for modifiers, and specific prefix patterns for variants, themes, and states.
| Pattern | Example | Usage |
|---|---|---|
Component__element | .SiteHeader__logo | Child element of component |
Component--modifier | .Card--shadowMedium | Visual variant |
variant--Name | .variant--Hero | Semantic variant |
theme--Name | .theme--Dark | Color theme |
.isState | .isActive, .isVisible | JavaScript-toggled state |
[data-attr="value"] | [data-menu-state="open"] | Attribute-based state |
[data-columns="X,Y"] | [data-columns="2,1"] | Responsive grid config |
Responsive Breakpoints
| Name | Value | Usage |
|---|---|---|
| Mobile | max-width: 599px | Single column, stacked layout |
| Tablet | min-width: 600px | 2-column grids begin |
| Desktop | min-width: 900px | Full navigation, multi-column |
| Large Desktop | min-width: 1112px | Wider content areas, pricing 2-up |
| Wide Desktop | min-width: 1264px | Max nav width |
| Extra Wide | min-width: 1300px | Product nav 4-column + sidebar |
Layout Grid
Paycraft uses a 12-column CSS Grid system with configurable column patterns via data attributes. Column gap is 20px. Content max-width is 1080px with additional column padding.
| Pattern | Desktop Behavior |
|---|---|
data-columns="1,1,1" | 3 equal columns (4-span each) |
data-columns="2,1" | 2:1 ratio (8-span + 4-span) |
data-columns="3,2" | 3:2 ratio |
data-columns="1,1,1,1" | 4 equal columns (3-span each) |
| Product Nav Grid | 4 columns + optional 226px sidebar |
| Content Max Width | 1080px + responsive padding |
| Nav Max Width | 1264px (refreshed) |
Z-Index Scale
| Layer | Value |
|---|---|
| Content (base) | 1 |
| Menu | 2 |
| Chat Button | 99 |
| Header | 100 |
| Modal | 999999 |
Tailwind Mapping
The paired JSON export now includes a tailwind section with theme extensions and component recipes. Use these mappings instead of default Tailwind tokens when recreating this system.
// tailwind.config.js
import designSystem from './design-system.json';
export default {
theme: {
extend: designSystem.tailwind.website.theme.extend,
},
};
// Swap to designSystem.tailwind.app.theme.extend for app/portal surfaces.
| Scope | Primary | Body Font | Radius | Shadow | Breakpoint |
|---|---|---|---|---|---|
| Website | #533afd | "sohne-var", "Helvetica Neue", Arial, sans-serif | 16.5px | 0 7px 14px 0 rgba(60,66,87,0.1), 0 3px 6px 0 rgba(0,0,0,0.07) | {'max': '599px'} |
| App / Portal | #5469d4 | -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Ubuntu, sans-serif | — | 0 7px 14px 0 rgba(60,66,87,0.1), 0 3px 6px 0 rgba(0,0,0,0.07) | — |
| Scope | Recipe | Class Pattern | Notes |
|---|---|---|---|
| Website | buttonPrimary | inline-flex items-center justify-center gap-2 rounded-button bg-brand-primary text-text-inverse shadow-sm px-4 py-2 text-detail font-semibold transition-colors | Primary action button using exported brand, radius, and shadow tokens. |
| Website | surfaceCard | rounded-card bg-surface-base text-text-primary border border-border-subtle shadow-sm p-6 | Default surface/card treatment for high-visibility content areas. |
| Website | inputField | rounded-sm border border-border-subtle bg-surface-base text-text-primary px-3 py-2 text-detail focus:outline-none focus:ring-2 focus:ring-focus-ring | Base text input treatment aligned to the exported radius, border, and focus tokens. |
| App / Portal | buttonPrimary | inline-flex items-center justify-center gap-2 rounded-md bg-brand-primary text-text-inverse shadow-sm px-4 py-2 text-body font-semibold transition-colors | Primary action button using exported brand, radius, and shadow tokens. |
| App / Portal | surfaceCard | rounded-md bg-surface-base text-text-primary border border-border-subtle shadow-sm p-6 | Default surface/card treatment for high-visibility content areas. |
| App / Portal | inputField | rounded-md border border-border-subtle bg-surface-base text-text-primary px-3 py-2 text-body focus:outline-none focus:ring-2 focus:ring-focus-ring | Base text input treatment aligned to the exported radius, border, and focus tokens. |