Design Book
v1.9 — Tarbert
This document defines the shared design language for GTV, the JACB Services helpdesk app, and any future projects. It follows GOV.UK Design System structure and principles, with tokens adapted to our brand and themes.
The system uses two themes — light (GTV default) and dark (helpdesk and invoice app) — driven by CSS custom properties. Use the Light / Dark buttons in the top bar to switch.
Colour
All colours are defined as CSS custom properties. The dark theme overrides the same properties — no additional class names needed on components.
Brand
Status
Typography
IBM Plex Sans for UI text, IBM Plex Mono for code, metadata, and monospace contexts.
Spacing
4px base unit. Use the named scale rather than arbitrary values.
Button
One primary action per page. Destructive actions use the warning variant. Ghost buttons are for low-emphasis inline actions.
Primary
ExampleSecondary
ExampleWarning (destructive)
ExampleGhost
ExampleAll variants
ExampleNotification banner
Used for system feedback. Always placed at the top of the main content area, above the page heading.
Success
ExampleError
ExampleWarning
ExampleInfo
ExampleCard
Cards are used for content listings — news items, testimonials, tickets, records. The branded variant with a top border is the primary pattern.
Standard card
ExampleRuth Adler — Glasgow, 1938
Ruth fled Vienna with her family after Kristallnacht. She settled in Glasgow and later became a teacher.
View testimony →Card grid (3-up)
ExampleExhibition opens in Edinburgh
The interactive exhibition visits the Scottish Parliament next month.
Partnership with NLS confirmed
The National Library of Scotland will host the archive from 2026.
Table
Use for structured data with clear column relationships. Numeric columns align right with mono font.
Standard table
Example| Name | Status | Country of origin | Year arrived |
|---|---|---|---|
| Ruth Adler | Published | Austria | 1938 |
| Max Freedman | Draft | Germany | 1936 |
| Hana Kovač | Published | Czechoslovakia | 1939 |
Striped variant
Example| Ticket | Assigned to | Priority | Created |
|---|---|---|---|
| #1042 | Jeremy | High | 21 Mar |
| #1041 | Unassigned | Low | 20 Mar |
| #1040 | Jeremy | Medium | 19 Mar |
| #1039 | Unassigned | High | 19 Mar |
Breadcrumb
Place directly above the page heading. The current page is not a link. Use chevron (›) as separator. Do not use breadcrumbs on top-level pages.
Standard breadcrumb
ExampleAccordion
Use to let users show and hide sections of content. Good for FAQs and supporting detail. Do not use to hide information that most users will need.
Standard accordion
ExampleGathering the Voices is a Scottish charity that records and preserves oral testimonies from Holocaust survivors and refugees who settled in Scotland.
All testimonies are available on the GTV website. Some include audio recordings, transcripts, and photographs.
Yes. If you or a family member has a testimony to share, get in touch through the contact page.
Search
Used for in-page or site-wide search. Input and button are equal height (44px) and flush. The header uses a compact 32px variant.
Standard search
ExampleNotes
Always include role="search" on the wrapper. Use type="search" for the browser's built-in clear button. The icon is Unicode ⌕ (U+2315) — no icon library needed.
Pattern: Article page
A long-form editorial article layout inspired by The Bell. Single centred column, no sidebar — content only. Combines existing design book components with two new article-specific patterns: pull quote and inline CTA.
Live example
The full working page is in article.html. It uses GTV content as a demo but the pattern applies to any project.
Page structure
Components used from design book
- Header —
hd,hd__nav— same as all pages, GTV logo variant - Breadcrumb —
breadcrumb— Home › News › Article title - Card / card-grid —
card card--branded— related articles at the foot - Button —
btn btn--primary,btn--secondary— CTA and share button - Tag —
card__tag— category and footer tags - Footer —
footer— standard footer - Tokens — all colours, typography, spacing from
:root
New patterns introduced
- Pull quote (
pull-quote) — brand left border, italic body, mono attribution. Candidate for promotion to a full component. - Article CTA (
article-cta) — adapts the banner component into an inline engagement prompt with a heading, body text, and button. - Reading progress bar — thin brand-purple bar at the top of the viewport driven by scroll position. Pure JS, no dependencies.
- Article layout (
article-page) — single centred column, 720px max, no sidebar. The key layout difference from design book inner pages.
Key design decisions
The article column is deliberately narrow — 720px — to keep line length comfortable for long reads (around 70 characters). The body text is slightly larger than base (1.0625rem) and line height is 1.75, both looser than UI components. Section headings get a border-top rule and top padding rather than just margin, giving clear visual breaks without feeling heavy. The standfirst uses the brand left border treatment from the banner component, repurposed editorially.
Pattern: WordPress Admin Dashboard
A full-page admin dashboard for WordPress plugins, rendered inside the WP admin panel. Uses the dark theme palette with JACB purple chrome. Tabs provide Overview, All Events, and Settings panels. First built for the GTV Timeline plugin (v1.28).
Anatomy
Header bar
ExampleTimeline Dashboard v1.28
Tab bar
ExampleStat cards
ExampleUse .db-stat--accent on the primary/headline stat. Numbers use IBM Plex Mono. Grid is auto-fit minmax(150px, 1fr).
Bar chart panel
ExampleEvents by Decade
Width percentage is calculated as (count / max) * 100 in PHP and output as an inline style. The gradient fill runs from #4b286d to var(--db-accent).
Events table (All Events tab)
Example| Date | Title | Media | Actions |
|---|---|---|---|
| 14 January 1938 | Kristallnacht Precursors | 🖼 | EditView |
| 9 November 1938 | Kristallnacht | 📹 | EditView |
| 1939 | Kindertransport Begins | 🖼 | EditView |
Settings tab — toggle and number input
ExampleHomepage Preview coming soon
Controls for the homepage timeline preview strip.
How many events to show in the preview strip. Default: 5. Max: 20.
Colour tokens (dark overlay)
Usage notes
- Apply the wrapper class
.gtv-db(or equivalent) to your dashboard container — do not setdata-theme="dark"on<html>as this will affect WordPress chrome. - The tab bar drives navigation via URL parameters (
?tab=overview) — no JS required for the tab switching itself. - Bar chart widths are calculated server-side in PHP as
round((count / max) * 100)and output as inlinestyle="width:X%". No charting library needed. - The filter input uses a single inline
addEventListener('input')to show/hide table rows bytextContent— no library required. - Load IBM Plex Sans and IBM Plex Mono via
wp_enqueue_stylefrom Google Fonts, scoped to the admin page hook. - This pattern was first implemented in the GTV Timeline plugin (v1.28, April 2026).
Open source
This design system is free to use, adapt, and build on.
Our position
We built this for our own projects but we're happy for anyone to use it. Take what's useful, adapt it freely, use it commercially. No attribution required, though it's appreciated.
What you're free to do
- Use the HTML, CSS, and JS in your own projects
- Adapt the tokens and components to your own brand
- Use it commercially
- Build on top of it without crediting us
- Redistribute it as part of your own work
Built on the shoulders of others
Built on the principles of the GOV.UK Design System, which is itself open source. IBM Plex Sans and Mono are released under the SIL Open Font Licence.
FAQ
Common questions about using the design system.
How do I switch between light and dark theme?
Add data-theme="dark" to the <html> element. Remove it for the light theme. All component styles respond automatically.
Do I need to include all the CSS?
For now yes — copy the full :root token block and the component styles you need.
Why no border-radius?
GOV.UK uses sharp corners throughout — clear and utilitarian rather than decorative. Kept consistent across all projects.
What fonts are required?
IBM Plex Sans (400, 500, 700) and IBM Plex Mono (400, 500). Load from Google Fonts:
Can I add new components?
Yes — follow the same structure: db-sub block, rendered example, code snippet. Add an entry to the sidebar nav and update the changelog.
What's the brand colour?
Primary purple is #4b286d. Always use --brand rather than the hex directly.
Openhearth Unleashed
Brand colour palette for openhearth.jacb.co.uk — a doggy day care and home boarding business based in Eaglesham, East Renfrewshire. Colours are drawn from the existing site at openhearth.scot. Earthy, warm, natural — sage greens and cream.
Brand Colours
CSS Custom Properties
Usage
——
DOGGY DAY CARE
& HOME BOARDING
——
UNLEASHED
Openhearth Unleashed
Welcome to Openhearth Unleashed. My name is Susan Margetts-McEwan, and the care and wellbeing of animals has been a large part of my life.
Sage (--oh-sage) is used for the hero/header area. Forest green (--oh-forest) is used for content sections. Cream (--oh-cream) is used for all text and logo elements on dark backgrounds. Light sage (--oh-sage-light) works as a divider or secondary background strip.
Typography
No custom typeface specified yet — inherits IBM Plex Sans from the JACB base. To be confirmed once the new theme is built out.
Changelog
Version names are towns and villages on the west coast of Scotland, changing weekly.
v1.9 — Tarbert · April 2026
- Client Brands section added to sidebar
- Openhearth Unleashed brand palette documented —
--oh-sage,--oh-sage-light,--oh-forest,--oh-cream - Colours sourced from existing openhearth.scot site; earthy sage greens and cream on dark forest green
v1.8 — Tarbert · April 2026
- WordPress Admin Dashboard pattern added — header bar, tab bar, stat cards, bar chart panel, events table, toggle, number input, save button, settings block
- All new components documented with live examples and code snippets
- Dark overlay token set documented (
--db-*) for use in WP admin without affecting WordPress chrome - First implemented in GTV Timeline plugin v1.28 (April 2026)
v1.7 — Tarbert · 21 March 2026
- Added Patterns section to sidebar navigation
- Article page pattern documented — structure, component list, design decisions
- Live link to
article.htmlfrom the design book - Pull quote, article CTA, reading progress bar, and article layout noted as new patterns introduced in
article.html
v1.6 — Tarbert · 21 March 2026
- Full layout rebuild — clean flex row with sticky sidebar, no content overlap
- Search icon and input equal height (32px header, 44px component)
- Working in-page search with overlay, keyword highlighting, Escape to close
- Search added as a component with code example and usage notes
v1.5 — Tarbert · 21 March 2026
- Header nav hover colour corrected
- Logo mark changed from GTV to JACB on both pages
- Footer updated to JACB Services branding
- Open source section added
v1.4 — Tarbert · 21 March 2026
- index.html homepage added in GOV.UK Design System style
- Design book updated to full-width header bar + vertical nav layout
- Navigation header component colours corrected
- Vertical nav component added
v1.3 — Tarbert · 21 March 2026
- Accordion component added with CSS animation and ARIA support
- Named version scheme introduced — west coast Scotland towns, changing weekly
v1.2 — Tarbert · 21 March 2026
- Navigation header height increased to 72px
- Nav link hover jitter fixed
- FAQ and Changelog sections added
v1.1 — Tarbert · 21 March 2026
- Initial release — Colour, Typography, Spacing, Button, Notification banner, Card, Table, Navigation, Breadcrumb
- Two themes: light (GTV) and dark (Helpdesk)
Design Book v1.9 Tarbert — JACB Services. Built on GOV.UK Design System principles.
Open source — use it, adapt it, build on it freely. Read our open source note →