Themes / 09
Civic
A plain, trustworthy theme for public services and health. WCAG AAA contrast, large type, and nothing left to guess.
npx shadcn@latest add https://strictthemes.com/r/civic.json- DESIGN.md The spec
- tailwind.css Tailwind CSS v4
- shadcn.css shadcn variables
- nuxt-ui.css Nuxt UI
- app.config.ts Nuxt UI config
- tokens.json W3C design tokens
01 / Preview
Stock shadcn components, this theme.
Ship the page, keep the system.
Every color, corner and typeface in this box comes from the theme's tokens. The components are stock shadcn.
96%88%100%02 / Page prompts
Paste one into your agent. Get that page.
Each prompt is a full brief for one page in this theme: its sections, layout, behavior, and a checklist the agent goes through before it says it is done. The rules in every prompt are generated from the theme's strict block. Each preview is the page a coding agent built from the prompt, shown as it came out.
Start page
The start page of a public service, saying what it is for, who can use it, what you need, how long it takes, a "Start now" link and other ways to apply.
32.5k characters · Run 3 times in Claude Code
Strict Check 100%
Question page
One step of a public-service form, with a few related questions, hints under the labels, a date in three fields, an error summary that links to each field, and a Back link.
33.7k characters · Run 3 times in Claude Code
Strict Check 100%
Check answers
The last step of a public-service form, listing the answers so far with a link to change each one, the price, a declaration to tick and the button that sends the application.
33.8k characters · Run 3 times in Claude Code
Strict Check 100%
Confirmation
The page a person sees after sending a public-service application, with a reference number they can copy, what happens next with dates, how to get help and a link to give feedback.
33.0k characters · Run 3 times in Claude Code
Strict Check 100%
Guidance
A page of plain-language guidance for a public service, with a contents list, short sections, a list, a table of fees, one important notice and related links.
33.7k characters · Run 3 times in Claude Code
Strict Check 100%
03 / Colors
Every color the theme allows.
primary
#0B3D91 / #9CC2FF
on-primary
#FFFFFF / #061A3D
secondary
#0B1320 / #F4F7FB
on-secondary
#FFFFFF / #0B1320
tertiary
#FFD400
on-tertiary
#0B1320
neutral
#414B5A / #B6C0CE
background
#FFFFFF / #0A0F18
surface
#F2F5F9 / #131B28
foreground
#0B1320 / #F4F7FB
border
#7B8696 / #66738A
error
#A30F0F / #FF9B91
success
#0B5F33 / #7BE0A6
Left: light mode. Right: dark mode.
04 / Typography
Five sizes. Nothing in between.
display
Public Sans · 48px · weight 800 · line 1.1
The quick brown fox
h1
Public Sans · 34px · weight 700 · line 1.2
The quick brown fox
h2
Public Sans · 24px · weight 700 · line 1.3
The quick brown fox
body
Atkinson Hyperlegible Next · 18px · weight 400 · line 1.6
The quick brown fox
label
Atkinson Hyperlegible Mono · 16px · weight 500 · line 1.4
The quick brown fox
05 / Shape and space
Corners and spacing.
sm
3px
md
5px
lg
8px
xs
4px
sm
8px
md
16px
lg
24px
xl
40px
2xl
64px
06 / Rules
What the strict block enforces.
- Contrast
- WCAG AAA
- Colors
- Tokens only, within 0.02 of a token
- Spacing
- Scale only, plus 0, 1px, 2px
- Corners
- Scale only, no full rounds
- Type
- Scale only, declared fonts only
- purple gradient
- Not allowed
- emoji icons
- Not allowed
- nested cards
- Flagged
- glow shadows
- Not allowed
07 / Guidance
What your agent reads.
Overview
Civic is for services everyone has to be able to use: a council form, a clinic booking, a benefits application, a school portal. It is built for the person who is tired, on an old phone, in bad light, or using a screen reader. Every text color meets WCAG AAA, borders are dark enough to see, and the design never asks the reader to guess what something is.
Colors
- Primary (
#0B3D91) is a deep civic blue, for the main action and links. - Secondary (
#0B1320) is blue-black ink for secondary buttons and headings. - Tertiary (
#FFD400) is signal yellow, with dark text on it. Use it for one notice that must not be missed, and for nothing else. - Neutral (
#414B5A) sets hints and secondary text. It is still 7:1 on the page. - Background (
#FFFFFF) is white. Surface (#F2F5F9) is a pale blue-grey for a summary box or a section of a form. - Border (
#7B8696) is dark enough (over 3:1) that the edge of a field can be seen. - Success (
#0B5F33) and Error (#A30F0F) report state. Each comes with a word and an icon, and an error says how to fix it.
Typography
Public Sans sets headings, plain and sturdy. Atkinson Hyperlegible Next sets body text at 18px: it was drawn so that similar letters cannot be confused. Atkinson Hyperlegible Mono sets labels, reference numbers, dates and button text at 16px, larger than a label in other themes. Labels are sentence case. The label of a form field, and the legend of a group of fields, is not a mono label: it is body text in bold, so the question is the largest thing by its field. Write in plain language, one idea to a sentence.
Layout
One column, 720px at its widest, for anything a person fills in or reads; a 12-column grid, 1120px at its widest, only for overviews. One question per screen where you can. Spacing comes from the scale (4, 8, 16, 24, 40, 64): 24px between fields, 40px between groups. Touch targets are at least 44px tall, with 8px between them.
Elevation & Depth
Flat. A summary box is the pale surface with a 1px border. Nothing depends on a shadow to be seen. Dialogs float on one short, neutral shadow and also have a border.
Shapes
Lightly rounded and consistent: 3px for badges and checkboxes, 5px for buttons and inputs, 8px for boxes. No pills, and no shape that carries meaning by itself.
Components
- Buttons: civic blue for the one main action on a screen, blue-black for the rest. Sentence-case labels that say what happens: "Save and continue".
- Cards (boxes): the pale surface, 8px corners, 24px padding, a 1px border.
- Badges: signal yellow with dark text, for a notice. State badges use the success and error colors with a word.
- Inputs: a visible label above, a hint under the label, and the error message next to the field it is about.
- Icons: 1.5px or 2px stroke line icons, always with a word beside them. Never emoji.
Do's and Don'ts
- Do keep every text pair at 7:1 or better, in both modes.
- Do put a visible label on every field and a word beside every icon.
- Do say what went wrong and what to do next, in the error itself.
- Don't rely on color, position or shape alone to say something.
- Don't use placeholder text as a label, or light grey text for anything.
- Don't introduce a color, size or radius that is not a token above.