|
| 1 | +# Digital Research Service — Design System |
| 2 | + |
| 3 | +**Digital Research Service (DRS)** is an innovative university IT department building tools that help researchers form cross-disciplinary teams. The product surfaced in this design system is a **skills-matching web app**: researchers maintain a profile of their expertise, project leads post project descriptions, and the system surfaces high-signal matches across departments and disciplines. |
| 4 | + |
| 5 | +The brand wants to feel like reading *Nature* or *Wellcome Trust* publications — editorial, restrained, data-forward, intellectually serious, but warm enough to invite people from disparate fields to actually collaborate. |
| 6 | + |
| 7 | +## Sources |
| 8 | + |
| 9 | +This system was bootstrapped from scratch at the user's request — there was no existing codebase, Figma, or full brand reference attached. After v1, the user confirmed they work at the **University of Nottingham**, the institutional parent, and supplied the official Nottingham screen logos (`assets/uon-logo-blue.png` and `assets/uon-logo-white.png`). UoN navy `#10263b` was sampled from the supplied logo and added as a supplementary token. Substitute or override anything else here that conflicts with the official Nottingham brand guidelines. |
| 10 | + |
| 11 | +## Brand hierarchy |
| 12 | + |
| 13 | +- **University of Nottingham** — institutional parent. Real, trademarked brand. Lock-up in `assets/uon-logo-*.png`. Always present in the top bar / footer of any DRS surface. |
| 14 | +- **Digital Research Service (DRS)** — the department within UoN's IT function that owns Matchboard. Appears as a small mono text label, not a competing logo. |
| 15 | +- **Matchboard** — the product. Has its own wordmark in `assets/matchboard-wordmark.svg`, paired with UoN in a co-brand lock-up (UoN | Matchboard). |
| 16 | + |
| 17 | +The DRS mark in `assets/drs-mark.svg` is an internal placeholder — not for public-facing use unless the department adopts it formally. |
| 18 | + |
| 19 | +--- |
| 20 | + |
| 21 | +## Index |
| 22 | + |
| 23 | +| File / Folder | Purpose | |
| 24 | +|---|---| |
| 25 | +| `README.md` | This file. Brand context, content rules, visual foundations, iconography. | |
| 26 | +| `SKILL.md` | Agent Skill entry point — read this when invoking the skill. | |
| 27 | +| `colors_and_type.css` | All design tokens — colors, typography, spacing, radii, shadows. | |
| 28 | +| `fonts/` | Webfont references (Geist via Google Fonts). | |
| 29 | +| `assets/` | Logos, wordmarks, sample researcher headshots, illustrations. | |
| 30 | +| `preview/` | Card files surfaced in the Design System tab. | |
| 31 | +| `ui_kits/matchboard/` | UI kit for the skills-matching web app ("Matchboard"). | |
| 32 | +| `ui_kits/matchboard/index.html` | Interactive multi-screen prototype. | |
| 33 | +| `ui_kits/matchboard/*.jsx` | Reusable component files. | |
| 34 | + |
| 35 | +--- |
| 36 | + |
| 37 | +## Content Fundamentals |
| 38 | + |
| 39 | +**Voice.** Like a well-edited research publication: factual, specific, never breathless. Sentences carry information; adjectives earn their place. The reader is a busy scientist — respect their time. |
| 40 | + |
| 41 | +**Person.** Address the user as *you*, but speak about the service in the third person ("Matchboard surfaces researchers whose recent work overlaps with your project"). Avoid "we" except in legal / staff-authored copy. |
| 42 | + |
| 43 | +**Casing.** Sentence case everywhere — buttons, menu items, headings, navigation. The only Title Case Things are proper nouns (research areas, lab names, the product name "Matchboard"). Never ALL CAPS except in a single editorial eyebrow (e.g. `RECENT MATCHES`) at small sizes with generous letter-spacing. |
| 44 | + |
| 45 | +**Numbers and data.** Numerals always, even at the start of sentences if necessary ("3 researchers matched"). Use the thin-space thousands separator visually but plain digits in inputs. Percentages have no space (`87%`). Always show units. |
| 46 | + |
| 47 | +**Tone — specific examples.** |
| 48 | +- ✅ "Match strength: 87%. Overlap on bioinformatics, single-cell sequencing, ethics review." |
| 49 | +- ❌ "Wow, 87% — what a great match! 🎉" |
| 50 | +- ✅ "No matches yet. Add a method or technique to your project to broaden the search." |
| 51 | +- ❌ "Oops, nothing here! Try adding more tags." |
| 52 | +- ✅ "Posted 4 days ago by Dr. Adaeze Okonkwo (Materials Science)." |
| 53 | +- ❌ "Posted by Adaeze, 4 days ago!!" |
| 54 | + |
| 55 | +**Emoji.** Never in product UI. Acceptable in informal staff-authored content (release notes, internal blog posts) but should still feel sparing. |
| 56 | + |
| 57 | +**Empty states.** Diagnostic, not cute. State what's missing and what to do, in one sentence. |
| 58 | + |
| 59 | +**Capitalization of disciplines.** Always Title Case for named fields (Computational Biology, Materials Science, Medieval Studies). Lowercase for general descriptors (interdisciplinary, quantitative methods). |
| 60 | + |
| 61 | +--- |
| 62 | + |
| 63 | +## Visual Foundations |
| 64 | + |
| 65 | +### Color |
| 66 | + |
| 67 | +The colour system follows the **University of Nottingham brand palette** (see [nottingham.ac.uk/brand/visual/colour.aspx](https://www.nottingham.ac.uk/brand/visual/colour.aspx)). The full set of UoN tokens lives in `colors_and_type.css` under "UoN PRIMARY", "UoN SUPPORTING", and "UoN NEUTRAL" blocks. |
| 68 | + |
| 69 | +**Rules from the UoN brand site — enforced here:** |
| 70 | + |
| 71 | +- **Nottingham Blue must be visually dominant** on every asset. Body copy, headings, and the primary brand mark are all Nottingham Blue. |
| 72 | +- **Black is not used.** Any historical black in the system has been replaced with Nottingham Blue. |
| 73 | +- **Maximum two supporting colours per design**, and together they should account for less than half the colour make-up. Supporting colours are accents — illustrations, icons, calls-to-action — not primary surfaces. |
| 74 | +- **Body copy must be Nottingham Blue or white.** No supporting colour appears as body text. |
| 75 | +- **White is avoided as a digital background.** Use Portland Stone 40% tint (`#FDFBF9`) or Nottingham Blue 5% tint (`#F3F4F5`) instead. |
| 76 | + |
| 77 | +**Primary** — Nottingham Blue `#10263B`. Five official tints: 80% `#405162`, 60% `#707D89`, 40% `#9FA8B1`, 20% `#CFD4D8`, 5% `#F3F4F5`. |
| 78 | + |
| 79 | +**Supporting palette (9, max 2 per design):** |
| 80 | + |
| 81 | +| Name | Hex | |
| 82 | +|---|---| |
| 83 | +| Jubilee Red | `#B91C2E` | |
| 84 | +| Mandarin Orange | `#F98109` | |
| 85 | +| Rebel's Gold | `#DEB406` | |
| 86 | +| Pioneering Pink | `#D7336C` | |
| 87 | +| Civic Purple | `#792D85` | |
| 88 | +| Forest Green | `#005F36` | |
| 89 | +| Bramley Apple | `#93D500` | |
| 90 | +| Trent Turquoise | `#37B4B0` | |
| 91 | +| Malaysia Sky Blue | `#009BC1` | |
| 92 | + |
| 93 | +**Matchboard's chosen pair:** Forest Green (strong matches, success, "Funded") + Rebel's Gold (skill tags, partial matches, warm accent). Pick a different pair for other DRS products as long as you stick to two. |
| 94 | + |
| 95 | +**Neutral** — Portland Stone `#FAF6EF` and its 40% tint `#FDFBF9` (preferred body background). White `#FFFFFF` for text on dark surfaces only. |
| 96 | + |
| 97 | +**Semantic mapping** (system uses these): |
| 98 | + |
| 99 | +- Success → Forest Green |
| 100 | +- Warning → Mandarin Orange |
| 101 | +- Error / destructive → Jubilee Red |
| 102 | +- Info → Nottingham Blue |
| 103 | + |
| 104 | +### Typography |
| 105 | + |
| 106 | +**Geist** for everything (UI, body, display) and **Geist Mono** for tabular data, codes, and identifiers. Single-family discipline keeps the system feeling editorial — variation comes from weight (400, 500, 600), size, and tracking, not from family-mixing. |
| 107 | + |
| 108 | +- Display headings: tight tracking (`-0.02em` to `-0.04em`), generous size jumps. |
| 109 | +- Body: `1rem` (16px) at `1.55` line-height, optical kerning enabled. |
| 110 | +- Small caps eyebrows: `0.75rem` Geist Medium, `0.14em` letter-spacing, uppercase. |
| 111 | +- Numerals: tabular figures by default in data contexts (`font-variant-numeric: tabular-nums`). |
| 112 | + |
| 113 | +### Spacing & Layout |
| 114 | + |
| 115 | +A 4px base scale: `4, 8, 12, 16, 24, 32, 48, 64, 96`. Page gutters are generous — content columns rarely exceed 720px for reading or 1200px for app surfaces. Generous white space is a feature, not a bug. |
| 116 | + |
| 117 | +Most layouts are left-aligned, asymmetric, with a clear primary column and a narrower secondary rail. Centered layouts are reserved for empty states and modals. |
| 118 | + |
| 119 | +### Backgrounds |
| 120 | + |
| 121 | +- **Default:** flat Paper (`#fdfcf8`). No textures, no gradients. |
| 122 | +- **Section breaks:** a single 1px Ink-at-12% hairline — the editorial rule. |
| 123 | +- **Cards:** Paper, with a 1px hairline border in Ink-at-10%. No drop shadows in the default state. |
| 124 | +- **Imagery:** when used, treated as editorial photography — desaturated slightly, warm-leaning. Headshots are square or 4:5, never circular except in dense lists. |
| 125 | + |
| 126 | +### Animation |
| 127 | + |
| 128 | +Restrained. Interaction feedback is fast (120ms) and uses a custom ease (`cubic-bezier(0.2, 0, 0, 1)`). Page transitions are static — no slide-ins. Loading uses a single 1px progress bar at the top of the viewport (Forest), not spinners. Avoid bounces entirely. |
| 129 | + |
| 130 | +### Hover States |
| 131 | + |
| 132 | +- **Buttons:** background darkens by ~6% (Forest → darker Forest). Never lighten. |
| 133 | +- **Links:** underline appears (was absent). Color unchanged. |
| 134 | +- **Cards:** border shifts from Ink-at-10% to Ink-at-25%. No lift, no shadow. |
| 135 | +- **Icon buttons:** background fills with Ink-at-6%. |
| 136 | + |
| 137 | +### Press States |
| 138 | + |
| 139 | +A subtle scale-down (`scale(0.98)`) on buttons only. No color change beyond hover. Released animation is 80ms. |
| 140 | + |
| 141 | +### Borders |
| 142 | + |
| 143 | +Always 1px. Always Ink-at-N% — never Forest as a border on body content (Forest borders are reserved for active/selected states). Border-radius is restrained: `4px` for inputs/buttons, `6px` for cards, `2px` for tags. No fully-rounded pills except for filter chips. |
| 144 | + |
| 145 | +### Shadows |
| 146 | + |
| 147 | +Almost none. The system uses **borders, not shadows** to define edges. Two exceptions: |
| 148 | +- **Floating menus / popovers:** a single soft shadow — `0 6px 24px -8px rgba(26, 26, 26, 0.18)`. |
| 149 | +- **Modals:** `0 24px 64px -24px rgba(26, 26, 26, 0.28)`. |
| 150 | + |
| 151 | +No inner shadows anywhere. |
| 152 | + |
| 153 | +### Capsules vs Protection Gradients |
| 154 | + |
| 155 | +Capsules are used for tags, status chips, and filter pills. Protection gradients (white-to-transparent fades over imagery) are not used in this brand — imagery is always supported by adjacent text, not overlaid. |
| 156 | + |
| 157 | +### Layout Rules |
| 158 | + |
| 159 | +- App chrome is fixed (top bar + left rail). Content scrolls. |
| 160 | +- Maximum content width on app surfaces: 1200px. |
| 161 | +- Reading column: 65ch (~640px). |
| 162 | +- Sticky elements use the Paper background with a 1px hairline; never blurred backdrops in product UI. |
| 163 | + |
| 164 | +### Transparency & Blur |
| 165 | + |
| 166 | +Used sparingly. Modal scrim is `rgba(26, 26, 26, 0.4)`, no blur. Toast notifications and the top bar are solid Paper. |
| 167 | + |
| 168 | +### Imagery |
| 169 | + |
| 170 | +Editorial documentary style: real researchers in real labs/offices, mid-action, warm color cast, slight film grain in hero contexts. Avoid stock photography clichés (gleaming microscopes, glowing molecules, hands-on-keyboards). When real photography isn't available, use **placeholders with a clear caption** — never AI-generated stand-ins. |
| 171 | + |
| 172 | +### Cards |
| 173 | + |
| 174 | +Paper background, 1px Ink-at-10% border, 6px radius, no shadow. Internal padding `24px`. Title row at top in Geist Medium. Metadata in Geist Mono small caps at the bottom. |
| 175 | + |
| 176 | +--- |
| 177 | + |
| 178 | +## Iconography |
| 179 | + |
| 180 | +**Heroicons** — line variant (1.5px stroke, 24×24 nominal). Loaded via CDN from `unpkg.com/heroicons` in HTML files, or rendered inline from the SVGs in `assets/icons/heroicons/` for offline / production use. |
| 181 | + |
| 182 | +- **Stroke weight:** always 1.5px at 24px nominal. Scale uniformly; do not adjust stroke. |
| 183 | +- **Color:** always inherit `currentColor`. Never apply gradient or two-tone treatments. |
| 184 | +- **Sizing:** common sizes are 16, 20, 24, 32. Icon should equal the surrounding text cap-height + 4px when paired with text. |
| 185 | +- **Alignment:** vertically optical-aligned with text, not centered on bounding box. |
| 186 | + |
| 187 | +**Emoji:** never used in product UI. See Content Fundamentals. |
| 188 | + |
| 189 | +**Unicode glyphs:** the following are used as semantic typographic marks (not icons): |
| 190 | +- `→` (U+2192) for "see also" and inline navigation hints. |
| 191 | +- `·` (U+00B7) as a metadata separator. |
| 192 | +- `—` (U+2014) em dash for editorial pauses (always with thin spaces, never spaces). |
| 193 | + |
| 194 | +**Logo:** the **University of Nottingham** master logo is the lead mark on every Matchboard surface (`assets/uon-logo-blue.png` on light, `assets/uon-logo-white.png` on the navy inverse). It pairs with the Matchboard wordmark via a 1px vertical divider — see `preview/brand-logo.html` for the lock-up. Use the official Nottingham brand-portal files in any production build; the screen-resolution PNGs supplied here are placeholders. The DRS mark in `assets/drs-mark.svg` is an internal placeholder and is not the public-facing mark. |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +## Font Substitution Notice |
| 199 | + |
| 200 | +The brand specifies **Geist** (Vercel's open-source typeface, available on Google Fonts and GitHub). Files are loaded via Google Fonts CDN; if you need self-hosted woff2 files, download from the Geist GitHub repo and place in `fonts/`. **No font substitution is currently active** — Geist is the real, intended choice. |
0 commit comments