Eduversal Design System
Visual identity reference for the five-app monorepo. Brand decisions, typography, spacing,
shadows, and component recipes. Source of truth lives in
shared-design/tokens.css
at the monorepo root and docs/DESIGN_SYSTEM.md.
Brand palette
Mor + cyan family identity. Mor is the primary brand color (favicon, navbar avatar gradient, Teachers Hub canon). Cyan is the companion (Central Hub's existing accent).
Brand
Ink (text)
Paper (surface)
Semantic
Brand gradient
Hero CTAs, primary save buttons, and brand chrome.
Typography
DM Sans for everything by default. Lora for hero h1 and .page-title only. DM Mono for code, doc IDs, technical badges.
Type scale
Spacing scale
8px-based scale. Container max-width --container-max: 1200px.
Shape (border-radius)
Default --radius is 10px (cards, inputs, dropdowns).
Shadows
Two scales — light surface (default) and dark surface (hero / landing).
Light surface
Dark surface
Components
Live previews of components shipped in shared-styles.css.
Per-page accent override
Pages may have a thematic accent (red for math pacing, green for biology, amber for appraisals). Override --accent only — never --brand.
<style> block AFTER the shared stylesheet loads. The brand chrome (navbar avatar gradient, brand-gradient buttons) keeps mor; only page-scoped components pick up the page accent.
:root {
--accent: #c0392b; /* math red */
--accent-dk: #a93224;
--accent-2: #fdf0ef;
}
Don't do
Common ways the design system gets quietly eroded.
- Hard-coded colors (
#6c5ce7,#7c3aed,rgba(28,28,46,.07)) outsidetokens.css. - Per-page redefinition of
--brand(override--accentinstead). - Mixing serif and sans on the same screen, except hero h1 = serif.
- Inline
<style>blocks longer than ~50 lines — extract to a stylesheet. z-index: 9999ad-hoc values. If you need it, your element should probably be a toast.- Deleting tokens you don't use yourself — another hub probably does.
- Redefining
--ink,--paper,--border,--shadow-*,--radius-*per page. Tokens live intokens.css; only--accentis per-page.
Source of truth: shared-design/tokens.css (CSS variables) +
docs/DESIGN_SYSTEM.md (rationale) at the monorepo root.
Each hub's local tokens.css is a synced copy — edit master, run npm run sync:tokens -- --apply.