CORA / DESIGN INFRASTRUCTURE Public reference
A shared language.For everything we build. Explore the cards, controls, overlays and content behind Cora. Try real examples, inspect their structure, and build from the same versioned contract as our coding agents.
24 Visual specimens
25 Component contracts
82 Named tokens
02 Surface profiles
Before any Cora UI change, read cora-frontend/lib/design-system.ts (or /design-system/manifest.json and /design-system/llms.txt), choose marketing or workspace profile, reuse existing shells and documented primitives, preserve all states and mobile sheet rules, run npm run check:design-system in cora-frontend, and record any intentional design exception.
cora-frontend/lib/design-system.ts Copy instructionsInherited design direction is preserved. Newly formalized tokens and accessible primitives are recommendations for future work; known legacy differences are recorded below. Updated 2026-10-13.
01 / REFERENCE The visual catalog An organized library of interactive specimens. Inspect the details, change the surface and theme, and carry each pattern into the next feature.
For people Browse a category, try the controls, and expand an example. Open “Usage & code” for variants, required states, and its source.
For developers & agents Reuse shared primitives. Adapt reference recipes to the feature, then verify every required state. Read the JSON manifest or agent contract before implementation.
Find a specimen Preview surfaceMarketing Workspace Preview themeLight Dark
All 24 Cards 6 Controls 5 Overlays 4 Content 3 Data & workflows 3 Images & icons 3
24 of 24 specimens · Interactive examples use fictional data.
Cards
Surface card Shared primitive The neutral container for related information, with clear hierarchy and an explicit inner action.
A quiet, useful surface. Default Cards group related content with a clear heading, useful context, and one primary next action.
Add to project Reset
Ready to add.
Usage & code When to use Use Card as the common surface instead of redefining border, radius and padding. Selection belongs to a labelled control and tonal fill. A div card is not a button. Keep titles, supporting text and metadata in that order; use a link for navigation. Variants standard surface tonal selection compact content
Required states default selected empty focus on inner action
Source & contracts cora-frontend/components/design-system/primitives.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Card><Badge>Draft</Badge><h3>Project overview</h3><p>Prepare the next delivery.</p><a href="/features/">View features</a></Card> Copy exampleCards
Feature card Reference recipe An icon, one concrete capability and supporting copy for a marketing feature or industry grid.
One place for the whole picture. Bring your team, clients, and creative work together in one calm workspace.
Workspace Collaboration
Explore feature Usage & code When to use Reuse the feature data registry and existing feature shell; preserve heading order. Use a neutral icon tile for interface examples. Authentic brand artwork keeps its content colors. Use one column on phones; add columns only while copy remains readable. Legacy colors in the source require scoped migration. Variants icon and copy capability list visual feature
Required states default link hover focus-visible grid stacked
Source & contracts cora-frontend/components/features/FeatureCards.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Card><h3>Projects in one place</h3><p>Keep milestones, files and decisions together.</p><a href="/features/">Explore features</a></Card> Copy exampleCards
Project card Reference recipe A workspace record with status, sample owner, due date, progress and an explicit details action.
Studio launch Brand strategy, visual direction, and a thoughtful first impression.
65% complete · Sample project
Select Usage & code When to use Keep selected-record context while opening details. Do not make a card with nested buttons a single clickable target. Name progress with visible text and a labelled progress element; include the due date format. Public examples use fictional owners. Actual industry terminology and permissions come from the host configuration. Variants active project completed project selected record
Required states default selected loading empty permission restricted
Source & contracts app/public/wp-content/plugins/cora-workspace/views/view-projects.phpStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Card><Badge tone="success">Active</Badge><h3>Studio refresh</h3><p>4 of 6 milestones complete</p><progress aria-label="Milestone completion" value={4} max={6} /><Button variant="secondary" onClick={openDetails}>View project</Button></Card> Copy exampleCards
Metric card Reference recipe A labelled operational value with units, comparison period and an explanation of change.
Projects this month
24 ↑ 12% vs. previous month
Fictional data · Last 30 days
Usage & code When to use Use tabular numbers and show currency or unit in visible copy. Explain the comparison period and direction in text. A green number alone does not establish an improvement. Never show unavailable data as zero; distinguish loading, no activity and fetch failure. Variants count currency comparison
Required states populated loading no data unavailable
Source & contracts app/public/wp-content/plugins/cora-workspace/views/view-financials.phpStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Card><h3>Invoices paid</h3><p>₹48,000</p><p>Sample month · INR</p><Badge tone="success">Up 8% from the previous month</Badge></Card> Copy exampleCards
Pricing card Reference recipe A sample plan with price, billing period, limits and a clear selection action.
Studio Sample plan For a growing team, with room to create.
₹999 / month
Illustrative pricing · INR · taxes extra
Shared project space Team collaboration Client handoffChoose sample plan Select a plan to inspect its state.
Usage & code When to use Catalog prices are fictional examples, never a replacement for active commercial plan configuration. Display currency, billing period, tax treatment and limits before the action. Selected plans use tonal fills and text indicators. Checkout uses the existing host flow. Variants monthly annual selected plan
Required states default selected billing switched processing failed
Source & contracts cora-frontend/components/pricing/PricingSection.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Card><h3>Sample plan</h3><p>₹999 / month · sample price</p><ul><li>5 sample projects</li></ul><Button onClick={selectPlan}>Choose sample plan</Button></Card> Copy exampleCards
Blog and article card Reference recipe An editorial cover, topic, title, excerpt and reading metadata for a discoverable article.
Studio journal Make room for your best work. A calmer way to organise projects, people, and everything in between.
Sample article 5 min read
Explore the journal Usage & code When to use Use the existing blog article schema and valid route. Keep published or updated dates accurate. Use a 16:9 cover and meaningful alt text when it communicates article content; decorative covers use empty alt. Prevent repeated links with ambiguous accessible names. This recipe documents structure while legacy editorial styles remain audited separately. Variants article card featured article related guide
Required states default image loading image unavailable link focus
Source & contracts cora-frontend/components/blog/BlogArticleCard.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Card><article><p>Guides · 5 min read</p><h3><a href="/blog/">Planning a calmer workflow</a></h3><p>A sample article about keeping decisions visible.</p><p>Updated 13 October 2026</p></article></Card> Copy exampleControls
Buttons and actions Shared primitive Primary, secondary, ghost and destructive actions with loading, disabled and icon-label examples.
primary Save changes Disabled
secondary Save changes Disabled
ghost Save changes Disabled
danger Remove Disabled
Choose any enabled action.
Usage & code When to use Use Button for actions and an anchor for navigation. Preserve the 44px target. Loading disables repeated clicks while retaining a human-readable label and aria-busy. Icon-only actions require an accessible name; decorative icons are hidden from assistive technology. Variants primary secondary ghost danger icon with label
Required states default hover focus-visible disabled loading
Source & contracts cora-frontend/components/design-system/primitives.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<><Button onClick={save}>Save changes</Button><Button variant="secondary">Cancel</Button><Button variant="ghost">More options</Button><Button variant="danger">Remove sample</Button><Button loading>Saving changes</Button><Button disabled>Unavailable</Button></> Copy exampleControls
Form fields and validation Shared primitive Visible labels, supporting hints, required inputs, disabled controls and actionable field errors.
Usage & code When to use Use TextField so labels and description IDs stay associated. Placeholder text is never the label. Choose input type, autocomplete and inputMode for the actual task; retain 16px text on mobile. Preserve entered values on validation failure, identify the field and explain the correction. Variants text email hint required error disabled
Required states empty entered focus-visible invalid disabled
Source & contracts cora-frontend/components/design-system/primitives.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<><TextField label="Project name" hint="Visible to your team" required /><TextField label="Email address" type="email" autoComplete="email" error="Enter a complete email address." /><TextField label="Reference" value="Assigned after creation" disabled /></> Copy exampleControls
Checkboxes, radios and switches Reference recipe Native labelled selection for independent choices, exclusive options and a binary preference.
Usage & code When to use Use native input behavior with visible labels and a fieldset legend for grouped choices. Radio options in one group share a name. A switch exposes its checked state and a stable label. Use tonal selection plus an indicator; do not introduce a heavy selected card outline. Variants checkbox radio group switch native select
Required states unchecked checked focus-visible disabled
Source & contracts cora-frontend/components/design-system/CatalogPreviews.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<fieldset><legend>Delivery preference</legend><label><input type="radio" name="delivery" value="email" defaultChecked /> Email</label><label><input type="radio" name="delivery" value="portal" /> Client portal</label><label><input type="checkbox" /> Include a summary</label></fieldset> Copy exampleControls
Tabs and segmented navigation Reference recipe Same-page panels with selected state, matching panel relationships and keyboard navigation.
Overview Activity Files
Overview A focused summary of your project, people, and next steps.
Use Left/Right arrows, Home, and End to navigate tabs.
Usage & code When to use Use anchors for route navigation; tabs select same-page panels. Implement roving tabindex, Arrow keys, Home and End with tablist/tab/tabpanel relationships. Keep the active state tonal and readable. Use native radios when selecting a setting instead of switching content. Variants panel tabs segmented options
Required states selected unselected keyboard focus panel visible
Source & contracts cora-frontend/components/design-system/CatalogPreviews.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<><div role="tablist" aria-label="Project views"><button role="tab" id="overview-tab" aria-controls="overview-panel" aria-selected={true}>Overview</button></div><section role="tabpanel" id="overview-panel" aria-labelledby="overview-tab">Project overview</section></> Copy exampleControls
Search and filters Reference recipe A labelled query with clear action, result count and an explicit no-results response.
Search sample projects
In progress Clear filters
3 projects found.
Studio launch Sample Brand refresh Sample Editorial session Sample Usage & code When to use Name the collection being searched and announce changing result counts without moving focus. Retain query when changing filters; use URL state for shareable views. No results should offer Clear filters and distinguish absence from a service error. Variants search input category filter clear query
Required states idle results no results cleared
Source & contracts cora-frontend/components/blog/BlogSearch.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<><TextField label="Search projects" type="search" value={query} onChange={e => setQuery(e.target.value)} /><Button variant="ghost" onClick={() => setQuery('')}>Clear search</Button><p role="status">{results.length} sample results</p></> Copy exampleOverlays
Modal dialog Shared primitive A focused task with a labelled title, contained keyboard focus and explicit completion or cancellation.
A clear, focused decision. A labelled modal keeps one task in focus, with an explicit close action.
Open modal Open the example to try keyboard focus and Escape.
Usage & code When to use Reuse Sheet with placement=modal for a centred dialog at every width. The native dialog supplies background inertness and focus containment. Escape and an explicit close action dismiss; return focus to the trigger. Keep one clear task per modal and protect unsaved work in caller state. Use placement=sheet or drawer when mobile bottom-sheet geometry is appropriate. Variants centred modal narrow-screen modal
Required states closed open submitting validation error dismissed
Source & contracts cora-frontend/components/design-system/primitives.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Sheet open={isOpen} onClose={() => setIsOpen(false)} placement="modal" title="Create sample project" footer={<Button onClick={createSample}>Create project</Button>}><TextField label="Project name" required /></Sheet> Copy exampleOverlays
Drawer and mobile bottom sheet Shared primitive A contextual inspector positioned at the desktop edge and at the bottom of a narrow screen.
Details, without losing context. A side panel on desktop becomes a reachable bottom sheet on a phone.
Open drawer Open the example to try keyboard focus and Escape.
Usage & code When to use Use Sheet placement=drawer for a full-height right-edge modal panel at >=1024px and a vertical bottom sheet below 1024px. Preserve whether an existing feature inspector is modal or modeless. Do not silently replace a modeless inspector with this modal primitive. The primitive supplies an associated title, explicit Close, Escape, focus containment/return and local scroll containment. Caller state preserves the selected record and protects unsaved changes. Variants desktop side inspector mobile bottom sheet
Required states closed open detail selected unsaved dismissed
Source & contracts cora-frontend/components/design-system/primitives.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Sheet open={isOpen} onClose={() => setIsOpen(false)} placement="drawer" title="Project details"><p>Selected sample project</p></Sheet> Copy exampleOverlays
Destructive confirmation Reference recipe A custom confirmation that identifies the affected sample record and the consequence of proceeding.
Confirm with confidence. Name the affected record and explain what changes before the user confirms.
Open confirmation Open the example to try keyboard focus and Escape.
“Studio launch” will leave the active project list. Its files and activity remain available in the archive.
This demonstration only changes local preview feedback.
Usage & code When to use Use Sheet with clear consequence copy; never browser-native confirm or alert. Offer a visible Cancel and a specifically labelled destructive action. Do not use an ambiguous Yes. Preview confirmation updates fictional local state only. Production removal needs permission, pending state and recoverable failure. Variants remove record discard changes
Required states closed open cancelled confirming failed
Source & contracts cora-frontend/components/design-system/CatalogPreviews.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Sheet open={isConfirming} onClose={cancelRemoval} title="Remove sample project?" footer={<><Button variant="secondary" onClick={cancelRemoval}>Cancel</Button><Button variant="danger" onClick={removeSample}>Remove sample project</Button></>}><p>The sample will disappear from this preview.</p></Sheet> Copy exampleOverlays
Toast and inline feedback Reference recipe Status messages that announce a local outcome and offer an explicit dismissal or recovery action.
Success Warning Error
Changes saved Your sample project is up to date.
This is an in-flow specimen. Product features reuse their host notification system.
Usage & code When to use Use the host notification API in real features. This inline reference does not create another global toast stack. Use role=status for informational feedback and role=alert for urgent errors; do not move focus to routine messages. Include text and a recovery action for failure; avoid relying on color or vanishing error messages. Variants informational success error dismissible
Required states idle visible dismissed retry available
Source & contracts cora-frontend/components/design-system/CatalogPreviews.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<div role="status"><p>Sample changes saved.</p><Button variant="ghost" onClick={dismissMessage} aria-label="Dismiss saved message">Dismiss</Button></div> Copy exampleContent
Accordion and disclosure Reference recipe Optional supporting information revealed through a named disclosure control.
What belongs in a project? Tasks, people, files, and the context your team needs to move forward.
Can I use this on mobile? Yes. Content stacks, touch targets remain reachable, and drawers become bottom sheets.
How do I keep the design consistent? Reuse the documented components and semantic tokens. Extend the shared contract when a new pattern is needed.
Usage & code When to use Prefer native details/summary when it suits the content; it supplies keyboard disclosure behavior. Critical instructions and validation stay visible outside a collapsed disclosure. For custom disclosure buttons associate aria-expanded and aria-controls; keep hidden content out of tab order. Variants single disclosure FAQ group
Required states collapsed expanded keyboard focus
Source & contracts cora-frontend/components/blog/BlogFAQAccordion.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<details><summary>How are project states used?</summary><p>Draft is editable; Ready for review awaits a decision; Complete records the final outcome.</p></details> Copy exampleContent
Typography and editorial structure Reference recipe Readable headings, paragraph text, lists, quote, links and code inside a contained reading column.
Studio journal · Example typography Good work needs a little breathing room. A thoughtful workspace makes the next step clear and gives the important things room to stand out.
Design team 13 October 2026 4 min read
Start with a shared rhythm. Use headings to guide the reader, concise paragraphs to explain the idea, and consistent spacing to connect related details. Keep operational labels direct.
Clarity is a feature. Every action should have a name, a purpose, and useful feedback. One primary action per decision. Readable text in both themes. Reachable controls on every screen. Read the documentation Usage & code When to use Preserve General Sans in marketing and Inter in workspace; use the contract type roles. Use sequential semantic headings and a reading width near --cora-content-reading. Long code scrolls locally. Quotes need source context; publishing and updated dates remain visible when available. Variants article prose documentation inline code quote
Required states reading link focus code overflow contained
Source & contracts cora-frontend/components/blog/BlogBlockRenderer.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<article><h2>Keep decisions visible</h2><p>A clear project record gives the team one place to find context.</p><ul><li>Define the outcome.</li><li>Assign the next action.</li></ul><blockquote><p>Write the decision beside the work.</p></blockquote><p>Use <code>--cora-text-body</code> for reading copy.</p></article> Copy exampleContent
Empty, loading and error states Reference recipe Distinct treatments for a new collection, no filter matches, loading and a failed request.
Empty Loading Error
Your next project starts here. Create a project to keep your team and ideas together.
Create sample project Usage & code When to use First use offers one meaningful creation action; filtered empty offers Clear filters. Use aria-busy on the loading region and a short status label; skeleton geometry matches the eventual content. Failed requests show a recoverable explanation and Retry. Never simulate a successful service response. Variants first use filtered empty loading skeleton recoverable error
Required states loading empty error retry populated
Source & contracts cora-frontend/components/design-system/CatalogPreviews.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Card><h3>No projects yet</h3><p>Create a project to keep the next delivery organised.</p><Button onClick={openCreate}>Create sample project</Button></Card> Copy exampleData & workflows
Data table Reference recipe A semantic sample records table with clear column headers, statuses and explicit row actions.
Usage & code When to use Keep table caption, scope=col headers and text status labels; numeric data uses tabular figures. On mobile keep wide tables inside a named local scroll region or provide labelled cards. Page overflow is forbidden. Sorting, filters and pagination must remain keyboard accessible and reflect visible result counts. Variants records table filtered table mobile contained scroll
Required states populated loading empty filtered empty error row action focus
Source & contracts app/public/wp-content/plugins/cora-workspace/views/view-leads.phpStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<table><caption>Sample projects</caption><thead><tr><th scope="col">Project</th><th scope="col">Status</th></tr></thead><tbody><tr><th scope="row">Studio refresh</th><td><Badge tone="success">Active</Badge></td></tr></tbody></table> Copy exampleData & workflows
Kanban board Reference recipe A stage-based sample board with counts and a non-drag way to move records.
Planned 1 Studio launch Brand direction · Sample task
Move toPlanned In progress Complete
In progress 0 No projects in this stage.
Complete 0 No projects in this stage.
Studio launch is in planned.
Usage & code When to use Resolve stage names from the active industry. Catalog stage labels are illustrative. Provide a labelled move select or buttons for keyboard and touch; drag is optional. Announce the new stage and preserve context. Constrain horizontal board scrolling to its region. Variants stage columns empty stage keyboard move
Required states populated empty stage moving moved save failure
Source & contracts app/public/wp-content/plugins/cora-workspace/views/view-leads.phpStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<section aria-label="Sample pipeline"><h3>In progress · 1</h3><Card><h4>Studio refresh</h4><label>Move sample to<select value={stage} onChange={e => moveSample(e.target.value)}><option>Planned</option><option>In progress</option><option>Complete</option></select></label></Card></section> Copy exampleData & workflows
Workflow stepper Reference recipe A guided workflow showing completed, current and upcoming steps with reachable next/back actions.
1 Details 2 Terms 3 GST Math 4 E-Sign 5 Complete Step 1 of 5 Details Add the project and client details.
Back Continue
Navigation demonstration; no signature or document is created.
Usage & code When to use Use the documented document flow when building documents: Details → Terms → GST Math → E-Sign → Complete. Set aria-current=step on the current item, validate before moving forward and preserve values when going back. At narrow widths keep a readable current-step label and avoid tiny overflowing labels. Variants full sequence mobile current step blocked progression
Required states current completed upcoming blocked
Source & contracts app/public/wp-content/plugins/cora-workspace/views/view-vault.phpStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<nav aria-label="Document creation progress"><ol><li aria-current="step">Details</li><li>Terms</li><li>GST Math</li><li>E-Sign</li><li>Complete</li></ol></nav> Copy exampleImages & icons
Images and avatars Reference recipe Editorial 16:9, gallery 4:3 and square/avatar image frames with captions and fallback treatment.
Fill frame Show whole image
Image frameEditorial · 16:9 Gallery · 4:3 Square · 1:1 Established Cora artwork · Cropped to fill a 16:9 frame. AL Avatar fallback · initials or an informative icon
Usage & code When to use Image content preserves its original colors; interface borders and surrounding controls use semantic tokens. Choose object-fit intentionally. Do not crop essential faces, document text or meaning; image captions retain attribution where needed. Informative images need meaningful alt; decorative images use empty alt. Avatar labels identify the fictional sample user and provide initials fallback. Variants 16:9 editorial cover 4:3 gallery image 1:1 square image avatar and initials
Required states loaded loading unavailable selected
Source & contracts app/public/wp-content/plugins/cora-workspace/views/view-media.phpStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<figure><img src={sampleCoverSrc} alt="Illustrated sample project workspace" width={640} height={360} /><figcaption>Sample editorial cover · 16:9</figcaption></figure> Copy exampleImages & icons
File upload Reference recipe A labelled real file control with limits, local validation and explicit file-selection feedback.
Usage & code When to use The catalog selection demo validates file metadata locally and does not send a file to a server. Show supported type and size limit in visible copy. Keep a keyboard-accessible real file input even if drag and drop is added. Production upload must implement progress, cancellation, server validation, failure and retry. Never claim a local selection is an upload success. Variants file picker dropzone file summary rejected file
Required states idle selected drag-over uploading complete rejected
Source & contracts cora-frontend/components/design-system/CatalogPreviews.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<><label htmlFor="sample-file">Choose sample image</label><input id="sample-file" type="file" accept="image/png,image/jpeg" aria-describedby="sample-file-hint" onChange={validateSampleFile} /><p id="sample-file-hint">PNG or JPEG. Maximum 5 MB. Local preview only.</p></> Copy exampleImages & icons
Icons and meaningful labels Reference recipe Consistent SVG glyphs for navigation, actions, files, media and status, paired with accessible names.
Folder Calendar Search Users FileText Image Mail Settings Upload Check ArrowRight MoreHorizontal Selected icon: Folder. Use a visible label or an accessible action name.
Lucide · consistent outline strokes · icons inherit the current text color.
Usage & code When to use Use lucide-react or existing product SVGs; typically 16/20/24px with 1.8–2.2px stroke. Do not substitute emojis. Keep decorative icons aria-hidden and name the containing action in human language. Icon-only buttons need aria-label or visible accessible text. Status icons still require a readable state label. Variants 16px inline 20px control 24px tile icon with label icon-only action
Required states decorative labelled focus-visible disabled
Source & contracts cora-frontend/components/features/FeatureIcon.tsxStructural example Implement the caller state and handlers. Preview compositions live in cora-frontend/components/design-system/CatalogPreviews.tsx.
<Button variant="secondary" aria-label="Open project files"><svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true"><path d="M3 7h6l2 2h10v11H3z" /></svg></Button> Copy exampleEach specimen links to existing component contracts by componentIds. Reuse the shared primitive API when status is shared-primitive. A reference-recipe demonstrates a composition, not a new shared component API or evidence of a completed legacy migration.
02 / REFERENCE Principles The decisions that stay consistent across every feature.
P01 Quiet surfaces, clear hierarchy Use Zinc, whitespace, typography and thin structural borders. No colored gradients, decorative emojis, heavy outlines or excessive shadows in operational UI.
P02 Meaning before decoration Status color is reserved for success, warning and error. Always pair color with text or an icon. Brand artwork and editorial accents stay in their established marketing contexts.
P03 One source, two surfaces Marketing and workspace share semantics and interaction principles while retaining their actual typography and canvas. Do not impose the marketing font on the product.
P04 Every state is a design decision Specify default, hover, focus, selected, disabled, loading, empty, error and success before a feature is complete.
P05 Mobile is a first-class workflow Use vertical sheets, explicit close controls, safe-area padding and reachable actions. Never force an off-canvas side drawer on a narrow screen.
P06 Preserve trust and privacy Use fictional names and sample records in public examples. Do not expose owner names, credentials, internal account data or real customer information.
03 / REFERENCE Two surfaces. Shared semantics. Choose a profile before writing UI. Preserve the type and canvas that actually ship.
existing-baseline marketing
Marketing site General Sans, expressive scale, white surfaces and monochromatic actions. Serif and handwritten accents belong to existing editorial hero treatments only. Do not add them to forms or data.
Stack Next.js App Router / React / Tailwind Font --cora-font-marketingCanvas --cora-bgReuse first components/layout/Navbar.tsxcomponents/layout/Footer.tsxcomponents/tools/ToolPageShell.tsxcomponents/tools/framework/ToolContainer.tsxSource references cora-frontend/styles/globals.csscora-frontend/tailwind.config.tscora-frontend/app/layout.tsx
existing-baseline workspace
Product workspace Inter for operational UI, JetBrains Mono for identifiers, compact hierarchy and tonal selection. Current workspace canvas is cream; dark canvas is #0c0c0e. Mobile sheets slide vertically. Keep industry labels dynamic.
Stack WordPress plugin / PHP / JavaScript / Tailwind Font --cora-font-workspaceCanvas --cora-canvasReuse first window.coraShowToastincludes/workspace-header.phpExisting feature-local sheet and table markupSource references app/public/wp-content/plugins/cora-workspace/assets/css/admin-style.cssapp/public/wp-content/plugins/cora-workspace/admin-dashboard.php.agents/AGENTS.md
04 / REFERENCE Design tokens Exact values with explicit purpose. Use semantic names in components; raw palette values are reference material.
All 82 palette semantic typography type scale spacing radius elevation motion layout layer
--cora-zinc-50Neutral reference 50; prefer semantic tokens in components.
#fafafapalette
--cora-zinc-100Neutral reference 100; prefer semantic tokens in components.
#f4f4f5palette
--cora-zinc-200Neutral reference 200; prefer semantic tokens in components.
#e4e4e7palette
--cora-zinc-300Neutral reference 300; prefer semantic tokens in components.
#d4d4d8palette
--cora-zinc-400Neutral reference 400; prefer semantic tokens in components.
#a1a1aapalette
--cora-zinc-500Neutral reference 500; prefer semantic tokens in components.
#71717apalette
--cora-zinc-600Neutral reference 600; prefer semantic tokens in components.
#52525bpalette
--cora-zinc-700Neutral reference 700; prefer semantic tokens in components.
#3f3f46palette
--cora-zinc-800Neutral reference 800; prefer semantic tokens in components.
#27272apalette
--cora-zinc-900Neutral reference 900; prefer semantic tokens in components.
#18181bpalette
--cora-zinc-950Neutral reference 950; prefer semantic tokens in components.
#09090bpalette
--cora-whitePure light surface / inverse text.
#ffffffpalette
--cora-creamExisting workspace canvas and editorial backdrop; never a colored action.
#FBFAF7palette
--cora-workspace-darkCurrent dark workspace canvas; cards remain neutral raised surfaces.
#0c0c0epalette
--cora-canvasSurface-profile page canvas; workspace overrides this to cream or its dark canvas.
#ffffffsemantic
--cora-bgPage and control surface.
#ffffffsemantic
--cora-surfaceSecondary surface.
#fafafasemantic
--cora-selectedTonal hover and selection.
#f4f4f5semantic
--cora-borderOne-pixel structural borders.
#e4e4e7semantic
--cora-border-strongAccessible input boundary; never heavy card selection. Recommended for new controls.
#71717asemantic
--cora-mutedSupporting text on light surfaces.
#52525bsemantic
--cora-subtleMetadata; do not reduce opacity on small text.
#71717asemantic
--cora-actionPrimary action / dark icon tile.
#09090bsemantic
--cora-on-actionText on primary action.
#ffffffsemantic
--cora-action-hoverPrimary action hover.
#27272asemantic
--cora-focusVisible keyboard focus; accessibility exception to decorative outline prohibition.
#52525bsemantic
--cora-successLegible success text; always include label or icon.
#166534semantic
--cora-success-bgSuccess surface only.
#f0fdf4semantic
--cora-warningLegible warning text; never the primary CTA.
#854d0esemantic
--cora-warning-bgWarning surface only.
#fefce8semantic
--cora-dangerError / destructive text.
#b91c1csemantic
--cora-danger-bgError surface only.
#fef2f2semantic
Aa --cora-font-marketingMarketing body and headings; retain current runtime font.
'General Sans', var(--font-sans, Inter), -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-seriftypography
Aa --cora-font-workspaceOperational workspace text.
var(--font-sans, Inter), -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-seriftypography
Aa --cora-font-uiActive surface font. Override through data-cora-profile.
var(--cora-font-marketing)typography
Aa --cora-font-codeCode, identifiers, token values; use tabular figures for numeric data.
var(--font-mono, 'JetBrains Mono'), Menlo, Consolas, monospacetypography
Aa --cora-text-captionRole: caption. Base rem assumes 16px; respect browser zoom.
0.75remtype scale
Aa --cora-text-codeRole: code. Base rem assumes 16px; respect browser zoom.
0.8125remtype scale
Aa --cora-text-smallRole: small. Base rem assumes 16px; respect browser zoom.
0.875remtype scale
Aa --cora-text-bodyRole: body. Base rem assumes 16px; respect browser zoom.
1remtype scale
Aa --cora-text-h3Role: h3. Base rem assumes 16px; respect browser zoom.
1.125remtype scale
Aa --cora-text-h2Role: h2. Base rem assumes 16px; respect browser zoom.
1.5remtype scale
Aa --cora-text-h1Role: h1. Base rem assumes 16px; respect browser zoom.
2remtype scale
Aa --cora-text-displayRole: display. Base rem assumes 16px; respect browser zoom.
3remtype scale
↔ --cora-space-0Four-pixel rhythm; choose by relationship, not arbitrary decoration.
0pxspacing
↔ --cora-space-1Four-pixel rhythm; choose by relationship, not arbitrary decoration.
4pxspacing
↔ --cora-space-2Four-pixel rhythm; choose by relationship, not arbitrary decoration.
8pxspacing
↔ --cora-space-3Four-pixel rhythm; choose by relationship, not arbitrary decoration.
12pxspacing
↔ --cora-space-4Four-pixel rhythm; choose by relationship, not arbitrary decoration.
16pxspacing
↔ --cora-space-5Four-pixel rhythm; choose by relationship, not arbitrary decoration.
20pxspacing
↔ --cora-space-6Four-pixel rhythm; choose by relationship, not arbitrary decoration.
24pxspacing
↔ --cora-space-8Four-pixel rhythm; choose by relationship, not arbitrary decoration.
32pxspacing
↔ --cora-space-10Four-pixel rhythm; choose by relationship, not arbitrary decoration.
40pxspacing
↔ --cora-space-12Four-pixel rhythm; choose by relationship, not arbitrary decoration.
48pxspacing
↔ --cora-space-16Four-pixel rhythm; choose by relationship, not arbitrary decoration.
64pxspacing
↔ --cora-space-20Four-pixel rhythm; choose by relationship, not arbitrary decoration.
80pxspacing
↔ --cora-space-24Four-pixel rhythm; choose by relationship, not arbitrary decoration.
96pxspacing
· --cora-radius-smControls: md/lg; cards: xl; sheets: 2xl; status: pill.
6pxradius
· --cora-radius-mdControls: md/lg; cards: xl; sheets: 2xl; status: pill.
8pxradius
· --cora-radius-lgControls: md/lg; cards: xl; sheets: 2xl; status: pill.
12pxradius
· --cora-radius-xlControls: md/lg; cards: xl; sheets: 2xl; status: pill.
16pxradius
· --cora-radius-2xlControls: md/lg; cards: xl; sheets: 2xl; status: pill.
24pxradius
· --cora-radius-pillControls: md/lg; cards: xl; sheets: 2xl; status: pill.
9999pxradius
· --cora-shadow-smSubtle surface lift.
0 1px 2px rgba(0,0,0,0.05)elevation
· --cora-shadow-sheetOverlay elevation; do not apply to every card.
0 20px 50px rgba(0,0,0,0.12)elevation
· --cora-backdropRecommended modal backdrop, verify module behavior before replacing legacy overrides.
rgba(9,9,11,0.45)elevation
· --cora-duration-fastHover and focus feedback.
150msmotion
· --cora-duration-normalSmall transitions; no artificial wait.
200msmotion
· --cora-duration-sheetSheet movement; disable for reduced motion.
250msmotion
· --cora-easeCalm deceleration.
cubic-bezier(0.2, 0, 0, 1)motion
· --cora-content-marketingCurrent main marketing container, observed across shipped components.
1240pxlayout
· --cora-content-editorialCurrent editorial and business-tool shell width.
1100pxlayout
· --cora-content-docsCurrent documentation shell width.
1440pxlayout
· --cora-content-workspaceOperational content maximum from legacy token specification.
1280pxlayout
· --cora-content-readingRecommended long-form prose width.
720pxlayout
· --cora-control-heightRecommended minimum interactive target.
44pxlayout
· --cora-drawer-widthDesktop panels only; mobile uses bottom sheet.
448pxlayout
· --cora-z-backdropLocal overlay backdrop.
50layer
· --cora-z-sheetLocal sheet/dialog.
60layer
· --cora-z-toastLocal feedback above sheets; bridge existing global z-index carefully.
70layer
05 / REFERENCE Typography Roles create hierarchy. Marketing uses General Sans; operational UI uses Inter; code uses JetBrains Mono.
Display Clarity in every detail.
--cora-text-display600–700 weight · 1.1 line height
Marketing hero; clamp to 32px on mobile; existing campaigns may use larger type.
Page title Clarity in every detail.
--cora-text-h1600–700 weight · 1.2 line height
One h1 per page; operational headings may use 24px.
Section title Clarity in every detail.
--cora-text-h2600 weight · 1.3 line height
Sections / sheet headings, semantic h2.
Card title Clarity in every detail.
--cora-text-h3600 weight · 1.4 line height
Grouped content and card headings.
Body Clarity in every detail.
--cora-text-body400 weight · 1.6 line height
Reading, forms on mobile; product dense rows use small (14px).
Small Clarity in every detail.
--cora-text-small400–500 weight · 1.5 line height
Supporting copy and product rows.
Caption Clarity in every detail.
--cora-text-caption400–500 weight · 1.4 line height
Metadata; never essential input copy below 12px.
Code Clarity in every detail.
--cora-text-code400–500 weight · 1.6 line height
Copyable code; horizontal scrolling confined to its own block.
06 / REFERENCE Live components Real reusable primitives. Change the surface, theme and state to inspect the same contract in action.
SurfaceMarketing Workspace ThemeLight Dark Button variantprimary secondary ghost danger Field statedefault error disabled
marketing / light / INTERACTIVE EXAMPLE
Project details A local preview. Changes here affect this example.
Save changes Disabled Open sheet demo
Preview loading stateUse Tab to inspect visible keyboard focus.
Project summary Active Autumn campaign
Draft Active Pending Overdue
Client Kavya Patel
Project status Ready for review
Identifier PRJ-024Semantic status labels, tonal surfaces and subtle structural borders.
Responsive modal preview. On a phone, this becomes a bottom sheet. Escape or Close dismisses it and returns focus to the opener.
Sheet@/components/design-system/primitives Props: open: boolean; onClose: () => void; title: string; placement?: sheet | modal | drawer (default: sheet); footer?: ReactNode; children: ReactNode
Token bindings: --cora-bg, --cora-border, --cora-backdrop, --cora-radius-2xl, --cora-drawer-width
<Sheet open={isOpen} onClose={() => setIsOpen(false)} title="Project details" placement="drawer">…</Sheet> Copy exampleButton@/components/design-system/primitives Props: variant?: primary | secondary | ghost | danger; loading?: boolean; all native button props
Token bindings: --cora-action, --cora-on-action, --cora-control-height, --cora-radius-lg
<Button variant="primary" loading={isSaving} onClick={save}>Save changes</Button> Copy exampleTextField@/components/design-system/primitives Props: label: string; hint?: string; error?: string; id?: string; all native input props
Token bindings: --cora-bg, --cora-border-strong, --cora-danger, --cora-text-body
<TextField label="Project name" hint="Visible to your team" required /> Copy exampleBadge@/components/design-system/primitives Props: tone?: neutral | success | warning | danger; children: ReactNode
Token bindings: --cora-selected, --cora-success, --cora-warning, --cora-danger
<Badge tone="success">Active</Badge> Copy exampleCard@/components/design-system/primitives Props: all native div props; children: ReactNode
Token bindings: --cora-bg, --cora-border, --cora-radius-xl, --cora-space-6
<Card><h3>Project summary</h3><p>Ready for review.</p></Card> Copy example07 / REFERENCE Component contracts Implementation references, accepted states and interaction requirements. Five primitives are shared code; other records describe existing patterns to reuse and improve.
components/design-system/primitives.tsx → ButtonPrimary: solid monochrome; secondary: soft border; ghost: tonal hover; danger: text plus semantic surface. 44px minimum target; native button semantics; type=button unless submit is intentional. Loading retains its label, disables repeat submissions and exposes aria-busy. Icon-only buttons need an accessible name. States default hover focus-visible disabled loading
components/design-system/primitives.tsx → TextFieldVisible associated label, stable id, hint and error via aria-describedby. Error uses aria-invalid and explanatory text. Do not use placeholder as label. Mobile input text is 16px. Choose autocomplete, type and inputMode for the task. States default focus-visible disabled error required
components/design-system/primitives.tsx → BadgeNeutral is the default. Success, warning and danger only communicate state. Include human-readable status; never rely on a colored dot alone. States neutral success warning danger
components/design-system/primitives.tsx → CardSubtle one-pixel border, 16px radius, 24px padding. A card is not clickable by default; put an explicit link or action inside. States default selected (when selectable) empty
lucide-react in marketing / existing SVG product iconsUse SVG icons, typically 16/20/24px, consistent 1.8–2.2px stroke. Decorative icons aria-hidden; icon actions need text equivalents. No emoji substitutions. States decorative labelled
Existing feature controls; prefer native inputsLabel the input; preserve checked, disabled and keyboard behavior. Use tonal filled selection and a check indicator; no heavy dark card border. States unchecked checked focus disabled
Feature-local; no shared tab primitive yetUse tabs only for same-page panels; use anchors for route navigation. ARIA tablist/tab/tabpanel, selected state, roving focus and arrow keys required for custom tabs. Native radios are valid for settings. States selected unselected keyboard focus
Native select preferred; feature-local custom menusUse native select for short lists. Custom searchable controls need full combobox keyboard behavior. Mobile filters may open a bottom sheet. Maintain a visible label. States closed open selected empty disabled
Marketing: components/ui/Toast.tsx; workspace: window.coraShowToastReuse the host notification API. No native alert, confirm or prompt. Informational messages use role=status, urgent errors role=alert; actionable messages need a dismiss option. Existing placement differs: marketing bottom center, workspace mobile top center / desktop bottom right. Do not create a third toast stack. States info success error dismissed
components/design-system/primitives.tsx → Sheet; existing feature-local panels remain separateShared primitive: native dialog with modal focus containment, background inertness, Escape dismissal and focus return. placement=sheet (default) preserves centred desktop geometry and bottom-sheet geometry at <=767px. placement=drawer is a right-edge full-height panel at >=1024px and a bottom sheet below 1024px. placement=modal remains centred at all widths. Bottom sheets use a drag handle, 24px top corners, explicit close and safe-area inset. The handle is a visual affordance; dismiss with Close or Escape. All placements are modal; modeless inspectors retain their existing feature-local behavior. Title is associated through aria-labelledby; protect unsaved work in the caller. Verify module backdrops before migration. States closed open submitting validation error unsaved
Workspace feature views / semantic HTML tablesKeep table headers, caption or accessible name and tabular numbers. At narrow widths use labelled cards or a local scroll container; never clip actions. Filters, sortable headers and pagination retain keyboard access and show empty/error states. States loading populated empty filtered empty error selected
Workspace CRM / lead viewsStages retain industry-aware labels. Provide non-drag move controls for keyboard and touch. Confine horizontal board scroll; show stage counts and clear drop feedback. States empty stage dragging moved save failure
Document creation and signature flowsExisting contract sequence: Details → Terms → GST Math → E-Sign → Complete. Use aria-current=step, validate before advancing, preserve entered values when going back. On mobile show current step and progress without tiny overflowing labels. States current completed upcoming blocked
Media / vault / tools viewsA dropzone includes a real labelled file input and keyboard alternative. Show accepted types, size limit, progress, cancel, failure and retry. Never promise privacy beyond actual processing. States idle drag-over uploading complete rejected
Crew scheduler and booking viewsDisplay timezone and local format explicitly. Native controls are preferred where practical. Calendar grids need keyboard navigation, selected date labels and unavailable state. States available selected unavailable invalid
Feature-local statesDistinguish no records, no filter matches, denied access and failed fetch. Give one meaningful next action; use aria-busy for loading regions. No artificial delays. Skeleton geometry matches final content; respect reduced motion. States loading empty error retry
Marketing Navbar/Footer; workspace header/sidebarReuse the current shell and route-aware active states. Workspace admin widget stays anchored at sidebar bottom with a profile popover. Mobile navigation uses vertical sheet or in-flow menu; headings and skip links support keyboard navigation. States current collapsed expanded mobile
Docs, tools and feature catalogsVisible label, clear query, result count and useful no-results state. Filters preserve query and communicate active state; URL state when sharable. States idle results no results cleared
Feature-local contextual helpHelp must be available on keyboard focus and touch, not hover alone. Critical instructions belong in visible copy. Escape dismisses, focus remains stable. States closed open dismissed
components/hero/Hero.tsx and page-specific heroesOne clear page promise, supporting copy and primary action. Retain established artwork; stack copy and illustration on mobile. Decorative imagery has empty alt text; informative imagery needs meaningful alt. States desktop mobile reduced motion
components/features and components/industryReuse domain data registry and existing card components. One column on phone, two on tablet, three where readable; maintain heading order. States all filtered empty detail
components/pricing/PricingSection.tsx and CheckoutSheet.tsxExplain currency, billing period and limits in visible text. Primary action remains monochrome; selected plan is tonal. Payment sheets preserve loading/error states and mobile close behavior. States plan selected billing switched processing failed complete
components/docs, components/blog, components/guidesReadable prose column, heading anchors, code overflow contained, mobile TOC. Preserve current content schemas; provenance and updated dates remain visible. States reading TOC open searching
components/tools/ToolPageShell.tsx; components/tools/framework/ToolContainer.tsxUse the established shell for the tool family. Existing families differ; do not combine randomly. Label every numeric input; show units, assumptions, rounding and result interpretation. Primary calculation remains usable on mobile with output directly after input. States initial valid result invalid input reset export
components/hero/HeroAIInput.tsx and feature-local agent panelsExplain what an action will do, show processing state and allow cancellation when supported. Never show simulated execution as a completed real action; expose recoverable errors. Model and quota labels come from active configuration, not hardcoded historical models. States idle composing processing result failure
08 / REFERENCE Product & feature patterns Design decisions across the product, beyond individual controls. Workspace source paths resolve under the cora-workspace plugin.
Shell, settings and permissions Persistent navigation, profile popover, dynamic permissions, explicit unsaved-change save bar; no unscoped CSS.
Source references admin-dashboard.phpviews/view-feature-hub.phpviews/view-cora-roles.phpviews/view-settings-suite.php
CRM, clients and pipeline Shared filter state across table/board; industry-aware labels; labelled status and keyboard alternative to drag-and-drop.
Source references views/view-leads.phpviews/view-clients.php
Tasks, projects and portfolio Consistent detail panels, checklists and activity; preserve confidentiality and selected-record context.
Source references views/view-client-task-manager.phpviews/view-projects.phpcora-frontend/app/portfolio/
Content, inbox and automation Separate draft, processing, published and failed states. Preserve editor content; show recoverable service errors.
Source references views/view-content-suite.phpviews/view-emails.phpviews/view-inbox.phpviews/view-automations.php
Media, proofing and galleries Aspect ratio presets 1:1 / 4:3 / 16:9, progressive previews, explicit selection and upload state; preserve image colors.
Source references views/view-media.phpviews/view-media-editor.phppublic-gallery-view.php
Documents and signatures Guided creation, labelled signature controls, audit state. Authored document fonts are content and remain outside interface typography restrictions.
Source references views/view-vault.phppublic-doc-view.php
Canvas and visual builder User-designed color and typography are an intentional exception; editor chrome stays neutral. Preserve autosave and selected-node context.
Source references views/view-canvas.phpviews/view-visual-builder.php
Finance, inventory and scheduling Tabular values, explicit currency/tax/timezone, empty states and permissions; equipment/listing terminology derives from industry.
Source references views/view-financials.phpviews/view-equipment.phpviews/view-crew-scheduler.php
Forms, reviews and client portals Visible labels and validation; client content retains its identity while functional controls follow the shared contract.
Source references views/view-forms.phpviews/view-review-acquisition.phppublic-form-view.phppublic-client-portal.php
Public marketing and knowledge Reuse existing hero, editorial and tool shells. Neutral controls coexist with established scenic artwork and authentic brand logos.
Source references cora-frontend/components/hero/cora-frontend/components/docs/cora-frontend/components/tools/framework/
09 / REFERENCE Responsive layout A single readable workflow at every width. Existing feature breakpoints must be inspected before a panel is migrated.
< 640pxPhone: one-column forms and cards, 16px outer gutter, 44px targets, 16px input text, bottom sheets; local table/code overflow only.
640–767pxLarge phone / small tablet: grow gutters to 24px when space permits; do not assume desktop panel behavior.
768–1023pxTablet: two-column content where readable. Existing workspace sheets use <=1023px; preserve the module breakpoint.
>= 1024pxDesktop: persistent in-flow navigation, 24–32px gutters and content max width. Desktop panels only where the feature supports them.
Zoom / safe areaReflow at 320px and 200% zoom. Respect env(safe-area-inset-bottom). Never disable pinch zoom or hide essential overflow.
Mobile sheet anatomy
Scrollable contentLabels · inputs · validation
Recommended modal pattern: up to 90dvh, 24px top corners, balanced scroll lock, focus containment and restoration. Modeless desktop inspectors retain their feature-local behavior.
10 / REFERENCE Accessibility is part of the system Calm visual design must remain perceivable, operable and understandable.
Normal text contrast at least 4.5:1; large text 3:1; necessary control boundaries / focus indicators 3:1. Verify each actual pairing, including dark mode. Keyboard focus must remain clearly visible. A subtle focus outline is required even though heavy decorative outlines are forbidden. Use semantic landmarks, sequential headings, associated labels, native controls and an accessible name for every icon action. Announce asynchronous status without moving focus. Errors identify the field and explain how to recover. Modal focus is contained and restored; Escape and an explicit close work. Never place hidden panels in the tab order. Respect prefers-reduced-motion, browser zoom and touch input. No automatic marquee or smooth scrolling for reduced-motion users. Status is conveyed by label or icon plus color. Do not use muted opacity for essential text. 11 / REFERENCE Content & terminology A consistent interface includes the words, sample identities and formats we use.
Use clear task language: Save changes, Create invoice, Move lead. Avoid technical infrastructure terms in customer workflows. Use fictional sample identities and no real owner or customer data in public UI or fixtures. Workspace labels resolve from active industry: equipment/property listings, shoots/showings, client/buyer leads. Do not hardcode industry names in shared views. Show currency, tax assumptions, dates and timezone explicitly. Keep identifiers and financial numbers tabular. Destructive actions explain the affected record and recovery limits; use custom confirmation surfaces. 12 / REFERENCE Audit & migration register Observed differences are explicit. Agents should resolve them within the feature they are changing.
Repository source audit of marketing components, product views, styles, existing tokens, and instructions. The new route is browser-verified separately; this is not a claim that every existing product workflow has been visually tested.
287 distinct six-digit colors and 64 arbitrary max-width values appear in frontend source, including artwork and third-party logos. These counts demonstrate decentralization, not that every value is an error.
Migrate touched features incrementally. No global restyling or changes to authenticated workspace behavior are part of this release.
D01 migration required
Legacy token files Observed. Root cora-design-tokens.js and frontend lib/cora-tokens.ts duplicate values and are not the executable source for current styling.
Decision. Historical references only. New UI consumes this contract and primitives; migrate a feature when touching it.
Source references cora-design-tokens.jscora-frontend/lib/cora-tokens.tscora-design-system.html
D02 documented exception
Typography Observed. Old tokens and brand page specify Inter; marketing runtime loads General Sans.
Decision. Preserve General Sans on marketing and Inter in workspace. Reconcile brand documentation in a separate scoped edit.
Source references cora-frontend/styles/globals.csscora-frontend/components/brand/BrandTypographySection.tsx
D03 migration required
Color Observed. Legacy WordPress Tailwind palette includes gold/bronze; status shades differ between brand and token files.
Decision. Zinc remains the inherited UI baseline. New status text tokens use darker legible colors; no gold action theme.
Source references app/public/wp-content/plugins/cora-workspace/tailwind.config.jscora-frontend/components/brand/BrandColorsSection.tsx
D04 migration required
Mobile panels Observed. Legacy tokens permit sliding drawers; workspace instructions require bottom sheets. CSS has overlapping 641px/1023px panel ranges.
Decision. Mobile vertical sheets take precedence. Audit the feature breakpoint and focus behavior before modifying a legacy panel.
Source references .agents/AGENTS.mdapp/public/wp-content/plugins/cora-workspace/assets/css/admin-style.css
D05 documented exception
Overlay backdrop Observed. Workspace guidance calls for blurred dark backdrop; some runtime CSS makes backdrops transparent.
Decision. The dark backdrop token is recommended for new modal patterns. Preserve and investigate existing module overrides when migrating.
Source references app/public/wp-content/plugins/cora-workspace/assets/css/admin-style.css
D06 documented exception
Feedback Observed. Marketing and workspace toast locations and z-index stacks differ.
Decision. Reuse host API and placement. The local layer scale applies to new isolated components, not a global z-index rewrite.
Source references cora-frontend/components/ui/Toast.tsxapp/public/wp-content/plugins/cora-workspace/assets/js/admin-script.js
D07 migration required
Accessibility Observed. Existing outline bans and animations can conflict with keyboard focus and reduced-motion needs.
Decision. Visible focus and reduced motion take precedence. New primitives implement focus and motion behavior; audit existing features on touch.
Source references .agents/AGENTS.mdcora-frontend/components/providers/SmoothScrollProvider.tsx
13 / REFERENCE The workflow for coding agents Keep the implementation and its public contract in the same change.
Read this manifest and the relevant profile before editing. Inspect the existing feature, reuse its shell, and choose documented components. Use named semantic tokens and reusable primitives; do not duplicate values. If a new pattern is needed, update this source, component, states and rationale together. Increment version: patch for corrections, minor for additive patterns, major for changed semantics. Run check:design-system and build; inspect desktop, 390px mobile, keyboard and neighboring routes. Document unresolved deviations; do not silently restyle unrelated modules. Authority & approval Inherited monochromatic design direction and existing executable product patterns. This release consolidates them; it does not claim every historical implementation is compliant.
New accessible status colors, minimum target sizes, semantic tokens and reusable primitives are implementation recommendations introduced with this contract. Changes to brand direction require explicit owner approval.
Current user instructions Applicable repository instructions and accessibility requirements This canonical contract and surface profile Feature-local implementation and its documented exceptions Legacy showcase and token files (historical only) Definition of done Source contract and all machine exports stay synchronized. No undocumented color/font literals in new design-system UI. Button loading, field errors, theme contrast and search work with keyboard. Inspect 390px and 1440px layouts and ensure no page-level horizontal overflow. Confirm /docs, /tools and marketing homepage still render with unchanged host styles. Build static export and confirm manifest.json, llms.txt and tokens.css exist in out/design-system. cd cora-frontend
npm run check:design-system
npm run buildThe automated guard checks the shared contract and design-system components. Legacy screens are migrated incrementally and require feature-specific verification.
Cora Design System / v1.1.0 Back to start ↑