| name | Packmind | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| description | Curator's Workshop. Calm warm-dark surfaces, periwinkle brand accent, flat tonal depth, Borna as the single voice. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| colors |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| typography |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| rounded |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| spacing |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| components |
|
Creative North Star: "The Curator's Workshop"
Packmind's design system is a calm, warm-dark surface that reads like a curator's workshop after hours: aged-paper neutrals tinted with warmth, a single periwinkle accent that behaves like ink under lamplight, and almost no chrome between the reader and the content. The product's job is to make a team's engineering playbook coherent across many AI agents; the interface stays out of the way of that work. Density is earned in the governance surfaces (lists, version history, deployment status) and relaxed in the editing surfaces (writing a standard, reviewing a change).
This system explicitly rejects the enterprise-B2B-admin default. No cramped gray-on-gray tables. No modal-for-everything. No tab-and-form-grid configuration panels that look like they came from a 2014 IT console. It also rejects the AI-startup-template look: no purple gradients, no hero-metric tiles, no glassmorphism, no "sparkle" iconography. The aesthetic lane is Notion + Vercel dashboard, leaning Vercel: strong typography, content-led layout, tonal depth without shadows.
Key Characteristics:
- Warm-dark surface as the default.
beige-1000(#181818) is the page, not pure black. - Single brand accent.
blue-200periwinkle, used sparingly on primary affordances. - Single typeface. Borna carries every weight; no display/body pairing.
- Flat at rest. Depth is conveyed through four tonal background steps, never through shadow.
- Quiet, low-chrome components. Borders are subtle, fills are deliberate, decoration is absent.
A warm-dark neutral scale anchors the system; one cool brand accent (periwinkle blue) carries identity; semantic colors are reserved for actual state.
blue-200(#c3c7fc): The brand accent. Used as the background for primary buttons (withbeige-1000text, a high-contrast inversion against the dark surface), as the foreground for outline buttons and links, and as the focus ring. Light cool blue against warm dark is the signature visual.blue-300(#a6acfb): Brand-hover. Slightly brighter periwinkle for primary-button hover and outline-button hover.blue-600(#62659d): Brand-disabled. Desaturated, lower-lightness periwinkle for disabled brand surfaces.
beige-1000(#181818): Surface primary. The page background, primary cards, secondary-button surface. The "room".beige-900(#2a2a29): Surface secondary. The canvas behind cards, table-row default, hover-surface for secondary buttons.beige-800(#3f3d3c): Surface tertiary. Tertiary buttons, striped-row alternation, chip subtle background.beige-700(#555352): Surface faded. Border-checkbox, faded surfaces, tertiary-button hover.beige-0(#ffffff): Text primary. White on warm-dark is the canonical body-text contrast.beige-100(#e9e3dd): Text secondary. Warm off-white, used for secondary body text and ghost-button label.beige-300(#b6b1ad): Text tertiary. Quieter labels, metadata, supporting text.beige-500(#84807d): Text faded. The lowest text contrast that still passes AA againstbeige-900; used for disabled, placeholder, helper text.
Reserved for state, never decorative.
green-500(#648b54): Success. Text-success, success-button background.red-500(#dd5151): Error / danger. Text-error, danger-button background, validation messages.yellow-500(#8e8227): Warning. Warning-button background. Note: the text-warning role usesorange-500(#c46652) instead; warning is split across two roles by historical drift.orange-300(#fe9680): Warm-accent reserve. Available in the palette but used sparingly; not part of the core brand affordances.
The One Accent Rule. blue-200 periwinkle is the only chromatic identity color. It carries primary affordance, focus, and link state. Do not introduce a second brand color, do not stack purples next to it, and do not promote orange or yellow to brand status. They are semantic warnings, not personality.
The Warm-Neutral Rule. Neutrals are beige, not gray. Every "background" or "border" choice resolves to a beige-* token. Cool grays (#1e1e1e, #2b2b2b slate-style) are forbidden; they break the workshop warmth that distinguishes Packmind from the generic dark-tool template.
The Inverted-Primary Rule. The primary button is light on dark: blue-200 background, beige-1000 text. Resist the reflex to make primary buttons dark with a glowing accent. The inversion is what makes the brand visible against a dark page.
Display / Body / Label Font: Borna (with sans-serif fallback).
Character: Borna is the single voice. It is a contemporary humanist sans with quietly distinctive details: slightly open apertures, low contrast, comfortable on screen at body size and confident at display size. Using one family at four weights (regular/medium/bold and italics) avoids the pairing-anxiety of editorial systems while still giving every hierarchy step a clear identity.
- Display (700, 2rem / 32px, line-height 1.5, letter-spacing -0.025em): Hero headlines on landing surfaces inside the app, large page titles. Used sparingly: at most one per screen.
- Headline (700, 1.5rem / 24px, line-height 1.5, letter-spacing -0.025em): Section titles, modal titles, major navigation labels.
- Title (500, 1.25rem / 20px, line-height 1.4): Card titles, list-item titles, subsection headers.
- Subtitle (500, 1.125rem / 18px, line-height 1.4): Minor section dividers, dense lists.
- Body (400, 0.9375rem / 15px, line-height 1.4, max 65–75ch in reading surfaces): Default running text, descriptions, form values. The 15px body (between 14 and 16) is deliberate: dense enough for governance lists, large enough for editorial reading.
- Label (500, 0.875rem / 14px, line-height 1.3, letter-spacing 0.025em): Small caps-style labels, form-field labels, button text in compact contexts.
- Small (400, 0.8125rem / 13px, line-height 1.3): Metadata, timestamps, helper text, table footnotes.
The Single-Voice Rule. Borna does all the work. Do not pair it with a display serif, a mono accent face for headlines, or a secondary sans. Mono is acceptable inside code blocks (system mono stack); nowhere else.
The Weight-and-Scale Rule. Hierarchy is established through scale and weight contrast, never through color. A title is not "the blue one"; it is the larger, heavier one. Color stays in the neutral ramp.
The 65–75ch Rule. Reading surfaces (the artifact editor, change-review pane, documentation panels) cap body line length at 65–75ch. Governance lists and tables are exempt; density is the point there.
Packmind is flat by default with tonal layering. There are no shadow tokens defined in the design system. Depth is conveyed exclusively through the four-step background ramp: beige-1000 → beige-900 → beige-800 → beige-700. A card on the page is beige-1000 over beige-900; a striped row inside a table is beige-800 against beige-900; a focused input draws contrast from its border and surface, not from a glow.
The Flat-By-Default Rule. No element is elevated at rest. No box-shadow on cards, panels, headers, or tabs. If a surface needs to feel above another, change its tonal step on the beige ramp; do not add a shadow.
The Tonal-Depth Rule. Stack at most three tonal steps in any single composition (e.g. page beige-900, card beige-1000, hovered row inside the card beige-800). More than three steps in a single visual stack reads as visual noise and collapses the hierarchy.
The Overlay Exception. Modals, menus, toasts, and combobox popovers may use a single subtle drop-shadow inherited from Chakra defaults to detach from the page beneath. Treat this as an exception, not a vocabulary. Never copy that shadow onto in-flow surfaces (cards, panels, table rows). If the shadow shows up anywhere except a true overlay, it is wrong.
Component character: quiet, content-first, low-chrome. Chrome (borders, fills, hover treatments) is minimal and deliberate. Affordance is communicated through color contrast and type, not through decoration.
- Shape: Gently rounded corners (
rounded-md, 0.25rem / 4px). Never pill-shaped, never square. - Primary: Periwinkle on near-black:
blue-200(#c3c7fc) background,beige-1000(#181818) text. Padding 0.5rem 1rem. The light-on-dark inversion is intentional and load-bearing.- Hover: background shifts to
blue-300(#a6acfb). - Disabled: background
blue-600(#62659d), textbeige-800.
- Hover: background shifts to
- Secondary: Surface matched to the page:
beige-1000background with a subtlebeige-900border. Used as the default action in dense areas where two primary buttons would compete.- Hover: background lifts to
beige-900, text drops tobeige-200.
- Hover: background lifts to
- Tertiary:
beige-800background,beige-200text. The quietest filled affordance; used in toolbars and compact controls.- Hover:
beige-700background.
- Hover:
- Outline: Transparent background,
blue-200border and text. Medium font weight. Used for promoted secondary actions inside the brand voice.- Hover: border and text shift to
blue-300.
- Hover: border and text shift to
- Danger / Success / Warning: Solid semantic:
red-500/green-500/yellow-500background,beige-0text. Reserved for destructive, confirming, or cautionary actions; never decorative. - Ghost: Transparent background, no border, no padding. Used as text-only triggers inside menus, icon-only triggers in toolbars.
- Style:
beige-1000background (matches primary surface),beige-0text,rounded-mdcorners, internal padding 0.5rem 0.75rem. - Border: Implicit; derived from surface contrast against the page, not from a heavy stroke.
- Focus: Periwinkle focus ring (
blue-200). The focus ring is the visible affordance; do not suppress it for visual quietness. - Disabled:
beige-500text, no border change. - Error:
red-500border, error message below the field intext-error(red-500).
- Corner Style:
rounded-md(0.25rem). - Background:
beige-1000against abeige-900page; one tonal step above the canvas. - Shadow Strategy: None. See Elevation.
- Border: Optional,
beige-900if present. Most cards rely on the tonal step alone. - Internal Padding:
1rem(lg) default;0.75rem(md) for compact density.
- Row:
beige-900background,beige-0text. - Striped row:
beige-800alternate (when striped variant is enabled). - Column header:
beige-1000background,beige-0text. Slightly higher contrast than the rows; anchors the head. - Cell border:
beige-1000bottom border on line variant. - Density: Comfortable. Row height should accommodate the body 15px line at line-height 1.4 with 0.75rem vertical padding. Resist AntD-style 32px rows.
- Style:
beige-800background,beige-200text,rounded-sm(0.125rem), padding 0.125rem 0.5rem. Quiet by default. - Semantic variants: Use the
*.subtle/*.fgsemantic-token pair (e.g.green.subtlebackground withgreen.fgtext) for state chips. Never stack multiple semantic chips in a single row without a clear hierarchy of meaning.
- Primary nav:
beige-1000surface against thebeige-900page. Active item:blue-200text or left-anchored indicator (1px, no thicker). Inactive:beige-100text. Hover:beige-0text. - Tabs: Underline-style. Active tab: 2px
blue-200underline,beige-0text. Inactive:beige-300text. No filled-pill tabs.
- Surface:
beige-1000,rounded-md, single overlay shadow from Chakra default. - Backdrop:
beige-1000at ~70% opacity over the page; no blur. - Use sparingly. Modals are the lazy answer. Prefer inline disclosure (an expanded row, a side-panel that pushes the page), reserve modals for genuinely disruptive flows (destructive confirmation, blocking auth, single-task wizards).
Packmind's artifact editor and preview lean on a Markdown viewer that styles content inside the editorial register: 65–75ch line length, body type, subtle dividers in beige-800, inline code in a system mono stack with beige-900 background. Treat this as the canonical "reading surface" template; new content-heavy views should match its rhythm.
- Do use
blue-200(#c3c7fc) as the single brand accent: on primary buttons, focus rings, outline buttons, and active-nav indicators. - Do use the inverted primary button (light periwinkle on near-black text) as the canonical primary affordance.
- Do convey depth through the four-step
beige-1000→beige-900→beige-800→beige-700ramp, with at most three steps stacked in one composition. - Do keep all text in the neutral ramp (
beige-0→beige-500) for body and labels; reserve color for state. - Do use Borna for every hierarchy step; vary scale and weight, not family.
- Do cap body line length at 65–75ch in reading surfaces (artifact editor, change review, docs panels).
- Do prefer inline disclosure and side-panels to modals; modals are reserved for genuinely disruptive flows.
- Do surface governance state (version, owner, deployment, adoption) in the primary view, not behind a History tab.
- Don't use cramped gray-on-gray data tables, modal-for-everything flows, or tab-and-form-grid configuration panels: the enterprise-B2B-admin default that PRODUCT.md names as the single biggest trap.
- Don't introduce purple gradients, hero-metric tiles, glassmorphism, identical card grids, or AI-sparkle iconography. These are the generic AI-startup template.
- Don't use developer-cool maximalism: neon terminals, scroll-triggered animations, 3D logos.
- Don't use pure
#000or#ffffor surfaces. Backgrounds are warmbeige-*; "white" text isbeige-0(#ffffff) only because it is the lightest beige step. - Don't use cool slate grays (
#1e1e1e,#2b2b2b) as neutrals. Neutrals are beige. - Don't add
box-shadowto cards, panels, table rows, headers, or tabs. Shadows live only on true overlays (modals, menus, toasts). - Don't use
border-leftorborder-rightgreater than 1px as a colored accent stripe on cards, alerts, or list items. Never. Rewrite with full borders, background tints, or leading icons. - Don't apply
background-clip: textwith a gradient (gradient text). Use a solid color; emphasize with weight or size. - Don't pair Borna with a serif display face, a mono headline, or a secondary sans. One voice.
- Don't introduce a second brand color. Periwinkle is the only chromatic identity; orange/yellow/purple are not brand.
- Don't rely on color alone to convey status. Pair every semantic color with text, icon, or position (deployment state, diff state, success/error).
- Don't use em dashes in UI copy. Commas, colons, semicolons, periods, parentheses. Also not
--.