The single source of truth for building anything ORIGIN: brand, colour, real embedded fonts, shapes, components, icons, motion, and the three interaction systems. Hand this file (or brand.origin.global) to any Claude session or human before they build. Supersedes ORIGIN-STYLE-GUIDE.md, ORIGIN-UI-PATTERNS.md and the old patterns reference HTML.
A regional brand transformation house — the missing middle between strategy consultancies and execution agencies. Never "marketing agency", "creative agency" or "consultancy". Locked value proposition: "We architect growth."
Full brand narrative, positioning and voice live in ORIGIN - Short Brand Guidelines - 2026.pdf (Brand Identity folder) and the Cowork Context Register. This file is the product/UI expression of that brand.
The 2026 wordmark in black on light, white on dark or purple. The product favicon is the ring glyph on a purple rounded tile.
00. Wiki/02. For Claude/Favicon/ (SVG + 32/180/512 PNG).Purple is the single action colour. Pink is the accent and the danger colour. Everything else is neutral canvas, surface and text. Secondary accents categorise, never act.
bg-mint/15 text-#06845F, bg-yellow/25 text-#8A6A12.Four families, all embedded in this file — what you see below is the real licensed type. English: Fractul for headlines, PP Neue Montreal for everything else. Arabic: IBM Plex Sans Arabic for headlines, Almarai for body — same pairing logic.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
نحن نهندس النمو. علامة تجارية إقليمية لتحويل العلامات.
نكتب النص الأساسي بخط المراعي لوضوح مثالي على الشاشة وفي الطباعة.
| Use | Spec | Notes |
|---|---|---|
| Page title (H1) | Fractul · 30px · 600 | Sentence case, tracking −0.015em |
| Section H2 | Fractul · 18–21px · 600 | |
| Card title | Fractul · 16–17px · 600 | |
| Body | Neue Montreal · 14–15px | leading-relaxed for paragraphs |
| Eyebrow / label | 11px · 600 · uppercase · tracking +0.16em · purple | The ONLY uppercase in the system |
| Meta / caption | 12px · muted |
02. ORIGIN/01. Brand Identity/02. Fonts/ (OneDrive); WOFF2 conversions ship inside the apps.Rounded, soft, geometric — a signature of the look. No hard right angles anywhere. Borders over shadows.
#ECECF1; hover often tints to purple/30–40. The recurring icon chip: 40px square, 12px radius, purple-50 background, purple icon.Paper canvas, white surfaces, minimal shadows. Dark ink panels get radial glow accents for depth.
Hero panels and sign-in brand sides are ink (#0A0A0A) with a purple radial glow top-right and an optional pink glow bottom-left. Highlights on dark are mint or white — never purple text.
0 8px 24px rgba(20,20,40,.06) + translate −2px.bg-surface/90 + backdrop-blur. Gotcha: backdrop-filter makes the element the containing block for position: fixed children — overlays rendered inside it must portal to document.body.The recurring primitives. In the ORIGIN One monorepo they live in @origin/design-system — reuse, never hand-roll variants.
Body in Neue Montreal. 20px radius, line border, hover lifts. This card demonstrates the hover-lift itself.
bg-mint/15 text-#06845F), auto-clears; no toast library.One library: lucide-react. Clean geometric line icons, stroke 2, inheriting currentColor. Sizes: 18px nav & inputs, 14–16px inside buttons and inline, 19–24px in icon chips. The working set:
text-* — never hardcode a colour on an icon inside a .btn (it must turn white on hover).Subtle, fast, purposeful. 150ms transitions for interaction, 300–350ms for movement and mounts, one celebration moment. Everything respects prefers-reduced-motion.
/* interaction: 150ms; movement: 300-350ms; ease default */ .transition { transition: all .15s ease; } /* mount */ @keyframes fadeup { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } .animate-fadeup { animation: fadeup .35s ease both; } /* hover lift (cards, tiles) */ .lift:hover { transform: translateY(-2px); border-color: rgba(92,17,209,.4); box-shadow: 0 8px 24px rgba(20,20,40,.06); } /* walkthrough spotlight + popover glide */ .spotlight { transition: all .3s ease-out; box-shadow: 0 0 0 9999px rgba(10,10,10,.55); } .tour-popover { transition: left .3s ease-out, top .3s ease-out; } /* progress bars / rings animate over .6s ease */ /* always */ @media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }
["#5C11D1","#FF2287","#0BFFB9","#FFDC5C","#33D9FF"]. Every ORIGIN app ships an in-app wiki behind the book icon and a guided tour that spotlights real elements, with one continuous progress count and a confetti finale. It cannot be dismissed by a stray click.
Selected lines and the running total, live. Save the scope to keep working on it later, or export it.
HelpSystem from @origin/design-system: book icon + wiki panel + spotlight tour.wiki-content.ts) — ships in the same commit as the build; can never drift.SECURITY DEFINER RPC — never a broad profiles self-update policy.onNextClick (never onDestroyed); allowClose:false; injected Skip control.For monorepo work, everything below already exists in @origin/design-system — import it. For a standalone build, paste these.
@import "tailwindcss";
@theme {
--color-ink: #0a0a0a;
--color-purple: #5c11d1; --color-purple-600: #6b1fe0; --color-purple-50: #f3ecff;
--color-pink: #ff2287; --color-pink-50: #ffe9f3;
--color-blue: #2049f2; --color-cyan: #33d9ff;
--color-mint: #0bffb9; --color-yellow: #ffdc5c;
--color-paper: #f7f7f9; --color-surface: #ffffff;
--color-line: #ececf1; --color-line-strong: #dededf;
--color-muted: #6b6b76; --color-muted-2: #9a9aa6;
--font-display: var(--font-display-src), "Fractul", "Space Grotesk", system-ui, sans-serif;
--font-sans: var(--font-body-src), "PP Neue Montreal", "Inter", system-ui, sans-serif;
}
body { background: var(--color-paper); color: var(--color-ink); font-family: var(--font-sans); -webkit-font-smoothing: antialiased; }
.font-display { font-family: var(--font-display); letter-spacing: -0.015em; }
import localFont from "next/font/local";
const display = localFont({
variable: "--font-display-src",
src: [
{ path: "./fonts/Fractul-Light.woff2", weight: "300" },
{ path: "./fonts/Fractul-Regular.woff2", weight: "400" },
{ path: "./fonts/Fractul-Medium.woff2", weight: "500" },
{ path: "./fonts/Fractul-Bold.woff2", weight: "700" },
],
});
const body = localFont({
variable: "--font-body-src",
src: [
{ path: "./fonts/PPNeueMontreal-Light.woff2", weight: "300" },
{ path: "./fonts/PPNeueMontreal-Regular.woff2", weight: "400" },
{ path: "./fonts/PPNeueMontreal-Medium.woff2", weight: "500" },
{ path: "./fonts/PPNeueMontreal-Bold.woff2", weight: "700" },
{ path: "./fonts/PPNeueMontreal-Italic.woff2", weight: "400", style: "italic" },
],
});
// <html className={`${display.variable} ${body.variable}`}>
// Arabic: load IBMPlexSansArabic-* and Almarai-* the same way and append
// their family names to the display/sans stacks for RTL fallback.
.btn { display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
border-radius: 12px; border: 1.5px solid var(--color-purple);
background: var(--color-surface); color: var(--color-ink); font-weight: 600; cursor: pointer;
transition: background .15s ease, color .15s ease, border-color .15s ease; }
.btn:hover { background: var(--color-purple); color: #fff; }
.btn:disabled { opacity: .45; cursor: default; }
.btn:disabled:hover { background: var(--color-surface); color: var(--color-ink); }
.btn-danger { border-color: var(--color-pink); }
.btn-danger:hover { background: var(--color-pink); color: #fff; }
.seg { display: inline-flex; align-items: center; gap: 2px; border-radius: 9999px;
border: 1.5px solid var(--color-purple); background: var(--color-surface); padding: 2px; }
.seg > button { border-radius: 9999px; border: none; background: none; color: var(--color-ink);
font-weight: 600; cursor: pointer; transition: background .15s ease, color .15s ease; }
.seg > button[data-active="true"] { background: var(--color-purple); color: #fff; }
.seg-pink { border-color: var(--color-pink); }
.seg-pink > button[data-active="true"] { background: var(--color-pink); color: #fff; }
@origin/design-system (platform) and the Rate Card app (standalone variant). Copy from those, not from memory.@origin/design-system primitives and the accent maps.document.body; track viewport in state, not at render.