Rebar Design System
Combined reference covering the marketing website and the product portal. Both surfaces share a brand blue, Roboto as the only typeface, and a squared 2px radius. The portal sits on a cool off-white shell; the website sits on pure white.
Overview
The marketing surface pairs an industrial blue primary (#1863DC) with a magenta accent (#CC3366) on a white canvas. Roboto is the single typeface; all corners are tightly squared at 2px (buttons, inputs) or lightly rounded at 4px (cards). Shadows are intentionally quiet — the system reads as workmanlike, not fintech-flashy.
Colors
Primary & Accent
Text
Backgrounds
Semantic
Typography
Roboto across all weights. A single family keeps the system coherent. Display weights (700) dominate hero moments; UI surfaces lean on 500 medium for nav items and captions.
Spacing
4px base unit; the scale is multiplicative and used consistently for padding, gap, and vertical rhythm.
| Token | Value | Typical use |
|---|---|---|
xxs | 4px | Icon / text baseline gaps |
xs | 8px | Tight inline gaps |
sm | 12px | Form field internal padding |
md | 16px | Card/body vertical rhythm |
lg | 20px | Section sub-gaps |
xl | 24px | Card padding |
2xl | 32px | Component margin |
3xl | 48px | Between content blocks |
4xl | 64px | Mobile section padding |
5xl | 96px | Desktop section padding |
Border Radius
Squared to lightly rounded. The 2px base (buttons, inputs) is the system's signature — it gives the brand its industrial, unembellished feel.
| Token | Value | Applied to |
|---|---|---|
xs | 2px | Buttons, inputs, chips |
sm | 4px | Cards, surface panels |
md | 8px | Modals, larger surfaces |
pill | 999px | Status pills only |
Shadows
| Token | Value |
|---|---|
xs | 0 1px 2px rgba(17,17,17,0.06) |
sm | 0 2px 4px rgba(17,17,17,0.08) |
md | 0 6px 12px rgba(17,17,17,0.08) |
card | 0 4px 10px rgba(211,203,203,0.2) |
nav | 0 2px 8px rgba(0,0,0,0.06) |
Buttons
Two-pixel borders on solid + outline variants give buttons their squared, durable feel. Padding is 10px 24px on the marketing site, 8px 27px in the portal.
| Variant | Background | Color | Border | Radius |
|---|---|---|---|---|
| Primary | #1863DC | #FFFFFF | 2px solid #1863DC | 2px |
| Secondary | transparent | #1863DC | 2px solid #1863DC | 2px |
| Ghost | transparent | #1863DC | none | - |
Inputs
Cards
Material Credit Line
Cover 100% of material costs with extended payment terms — no upfront capital needed.
Tailwind Reference (Website)
The paired JSON file ships a ready-to-consume tailwind.theme.extend block plus componentRecipes. Paste the extend object into tailwind.config.js under theme.extend, or import the JSON directly in a modern build. When a recipe exists, use it verbatim instead of ad-hoc utility strings.
How to consume
// tailwind.config.js
import tokens from './design-system-website.json' assert { type: 'json' };
export default {
content: ['./src/**/*.{html,ts,tsx,vue}'],
theme: {
extend: tokens.tailwind.theme.extend,
},
};
Exported theme.extend highlights
| Scale | Keys |
|---|---|
| colors | brand.*, accent, text.*, surface.*, border.*, status.* |
| fontFamily | sans: ['Roboto', 'system-ui', 'sans-serif'] |
| fontSize | hero, h1–h3, body, small, label, caption |
| spacing | xxs 4 / xs 8 / sm 12 / md 16 / lg 20 / xl 24 / 2xl 32 / 3xl 48 / 4xl 64 / 5xl 96 |
| borderRadius | xs 2px / sm 4px / md 8px / pill |
| boxShadow | xs, sm, md, card, nav, focus |
| screens | sm 600 / md 900 / lg 1200 |
Component recipes
| Recipe | Utility pattern |
|---|---|
buttonPrimary | inline-flex items-center justify-center rounded-xs bg-brand-primary text-text-inverse border-2 border-brand-primary px-6 py-2.5 text-small font-medium hover:bg-brand-hover hover:border-brand-hover transition-colors |
buttonSecondary | inline-flex items-center justify-center rounded-xs bg-transparent text-brand-primary border-2 border-brand-primary px-6 py-2.5 text-small font-medium hover:bg-brand-primary hover:text-text-inverse transition-colors |
surfaceCard | rounded-sm bg-surface-base border border-border-hairline shadow-card p-xl |
inputField | rounded-xs border border-border-soft bg-surface-base px-3 py-2.5 text-small text-text-primary focus:outline-none focus:border-brand-primary focus:ring-2 focus:ring-brand-primary/15 |
navbarLink | text-text-primary text-small font-medium hover:text-brand-primary transition-colors |
Overview
The portal keeps the brand blue but switches the shell from white to a cool off-white (#F1F5F8) so content cards can elevate on a quiet canvas. Typography shifts to 15px body and tighter slate text (#101828 / #2C3E50). Scope documented here is the authentication surface — deeper dashboards sit behind login and were not crawlable.
App Colors
Surfaces
Text
Borders & States
App Typography
Form Fields
Log in
| Element | Spec |
|---|---|
| Input background | #FFFFFF |
| Input border | 1px solid #D0D5DD |
| Input radius | 2px |
| Input padding | 10px 14px |
| Input focus | border #1863DC, shadow 0 0 0 3px rgba(24,99,220,0.15) |
| Label | 14px / 500 / #101828 |
Auth Card / Surface
| Token | Value |
|---|---|
| Background | #FFFFFF |
| Radius | 8px |
| Padding | 32px 40px |
| Max width | 440px |
| Shadow | 0 10px 24px rgba(16,24,40,0.08) |
App Buttons
Identical chrome to the marketing system — primary blue solid, 2px border, 2px radius. Portal padding is slightly tighter (8px 27px) to match dense form rhythm.
Tailwind Reference (App / Portal)
The paired JSON file ships a ready-to-consume tailwind.theme.extend block plus componentRecipes. Paste the extend object into tailwind.config.js under theme.extend, or import the JSON directly in a modern build. When a recipe exists, use it verbatim instead of ad-hoc utility strings.
How to consume
// tailwind.config.js
import tokens from './design-system-app.json' assert { type: 'json' };
export default {
content: ['./src/**/*.{html,ts,tsx,vue}'],
theme: {
extend: tokens.tailwind.theme.extend,
},
};
Exported theme.extend highlights
| Scale | Keys |
|---|---|
| colors | brand.*, accent, text.*, surface.*, border.*, status.* |
| fontFamily | sans: ['Roboto', 'system-ui', 'sans-serif'] |
| fontSize | hero, h1–h3, body, small, label, caption |
| spacing | xxs 4 / xs 8 / sm 12 / md 16 / lg 20 / xl 24 / 2xl 32 / 3xl 48 / 4xl 64 / 5xl 96 |
| borderRadius | xs 2px / sm 4px / md 8px / pill |
| boxShadow | xs, sm, md, card, nav, focus |
| screens | sm 600 / md 900 / lg 1200 |
Component recipes
| Recipe | Utility pattern |
|---|---|
buttonPrimary | inline-flex items-center justify-center rounded-xs bg-brand text-white border-2 border-brand px-[27px] py-2 text-label font-medium hover:bg-brand-hover transition-colors |
buttonSecondary | inline-flex items-center justify-center rounded-xs bg-transparent text-brand border-2 border-brand px-[27px] py-2 text-label font-medium hover:bg-brand hover:text-white transition-colors |
inputField | w-full rounded-xs border border-border-input bg-surface-base px-3.5 py-2.5 text-body text-text-primary placeholder:text-text-muted focus:outline-none focus:border-brand focus:ring-3 focus:ring-brand/15 |
authCard | rounded-md bg-surface-base p-8 max-w-[440px] shadow-card |
appShell | min-h-screen bg-surface-app p-2xl |
Tailwind Reference (Combined)
The combined JSON exposes one tailwind.theme.extend that covers both surfaces. Per-surface CSS variables are prefixed in componentRecipes (website* vs app*). When a build only targets one surface, prefer that surface's dedicated design-system-website.json or design-system-app.json.
How to consume
import tokens from './design-system.json' assert { type: 'json' };
export default { theme: { extend: tokens.tailwind.theme.extend } };
Component recipes (by scope)
| Scope | Recipe | Utilities |
|---|---|---|
| Website | websiteButtonPrimary | inline-flex items-center justify-center rounded-xs bg-brand text-text-inverse border-2 border-brand px-6 py-2.5 text-small font-medium hover:bg-brand-hover hover:border-brand-hover transition-colors |
| Website | websiteCard | rounded-sm bg-surface-base border border-border-hairline shadow-card p-xl |
| Website | websiteInput | rounded-xs border border-border-soft bg-surface-base px-3 py-2.5 text-small text-text-primary focus:outline-none focus:border-brand focus:ring-2 focus:ring-brand/15 |
| App / Portal | appButtonPrimary | inline-flex items-center justify-center rounded-xs bg-brand text-white border-2 border-brand px-[27px] py-2 text-label font-medium hover:bg-brand-hover transition-colors |
| App / Portal | appAuthCard | rounded-md bg-surface-base p-8 max-w-[440px] shadow-app-card |
| App / Portal | appShell | min-h-screen bg-surface-app |
| App / Portal | appInput | w-full rounded-xs border border-border-input bg-surface-base px-3.5 py-2.5 text-body text-text-appPrimary placeholder:text-text-muted focus:outline-none focus:border-brand focus:shadow-focus |
| App / Portal | appFieldLabel | block text-label font-medium text-text-appPrimary mb-1.5 |