The Assert design system
The logo, colours, type, shapes, states and charts that make up Assert, with their exact values.
How Assert looks: its logo, colours, type, shapes, states and charts, with their exact values. Everything made for Assert follows it: the website, the team view, the reports and social posts.
The logo
The logo is a pulse inside the family braces, followed by "Assert" in Schibsted Grotesk 800. The braces and the name are in ink. The pulse is drawn in warm steel metal, running from #A7A7CA through #56557A to #2D2C4C, and lifted on dark grounds to #DFDFF1, #B6B6D6 and #8282A4.
- The braces are shared by Canine's four products and mark them as one family. The pulse and its warm steel belong to Assert.
- The pulse belongs to the logo only, and is never drawn as a chart or a state.
- The light version goes on light grounds and the dark version on dark grounds. The name is never retyped next to a drawn mark, and the braces are never redrawn.
- The logo is at least 24 px high, with clear space of half its height around it. Under 32 px, a small mark takes its place: the same symbol with heavier strokes and fewer parts. In browser tabs it sits on a rounded dark tile.
- "by Canine Development" goes below the logo or in the footer, and "Powered by Canine Code Analyzer" goes in the footer.
Colour
Assert has one accent: warm steel. As a flat colour it is #56557A on light grounds and #B6B6D6 on dark. It marks the main action, the current sprint, work with the agents and resolved findings. It is never used for a warning.
| Role | Light | Dark |
|---|---|---|
| Page background | #FCFCFD | #15191E |
| Alternate website band | #F3F5F8 | #191E24 |
| Cards, panels, tables and reports | #FFFFFF | #1C2127 |
| Headlines, text and icons | #1C2126 | #E4E9ED |
| Sublines, secondary text and file paths | #3D4650 | #C3CBD3 |
| Labels, dates and meta text | #616B76 | #8694A1 |
| Accent | #56557A, text on it #FFFFFF | #B6B6D6, text on it #15191E |
| Active navigation item and tags | #EFEFF9 with #444367 text | #262635 with #CBCBE5 text |
| Hairlines and card borders | #E2E6EB | #2B323A |
| Example tag border | #C3CAD2 | #3A434D |
| Buttons, quiet metal | #5D5C81, #56557A, #3D3B5D, white lettering | The same |
| The current sprint bar | #76769D, #56557A, #2D2C4C | #DFDFF1, #B6B6D6, #8B8BAE |
| Earlier sprints and quarters in charts | #8B95A0 | #67717C |
| Graphite top: header and first section | #29323C, #161B21, #0C1014, bar #1B2128 | The same |
| Text on the graphite top | #E4E9ED, muted #A3AFBB | The same |
| A card's finish and edge on the graphite top | #FFFFFF, #F4F5F8, edge #C9CCD4 | #232A31, #1A1F25, edge #3A434D |
| Module map, most to fewest open findings | Warm steel tints from #9B9BBE to #EDF0F3 | Lifted warm steel from 45% to 12% strength |
- Pages sit on the page background, alternate bands on the band colour, and cards and tables on the card colour.
- Depth comes from 1 px borders in both modes. Cards carry no shadow. The only shadow is on metal buttons.
- The website's header and first section sit on the graphite top in both themes, with light falling from the top left. Sections below follow the theme.
- The accent is drawn as warm steel metal on buttons, the logo's pulse and the current sprint bar. Buttons take quiet metal: a short run with no shine. The metal stays on small parts, never on large areas.
Type
| Role | Typeface | Sizes |
|---|---|---|
| Headlines and large numbers | Schibsted Grotesk 900 | 64, 46 and 26 px; reports 68 px; numbers 30 px |
| Text and interface | Schibsted Grotesk 400 and 700 | Lead 20 px, body 17 px, interface 15 px, small 13 px |
| Labels, chart values and files | Martian Mono 400 | Labels 11 px in capitals, code 13 px, values 11 px |
- Headlines are tightened by 2% and wrap balanced. Body lines stay near 65 characters.
- A heading that ends on its payoff draws that last part in the warm steel metal, and the rest stays in text colour. Labels, questions, steps and legal headings stay in one colour.
- Schibsted Grotesk is also the logo's typeface.
- Mono is for small things only: labels, the Example tag, chart values, sprint names, module names and file paths.
- Both typefaces are open source, under the SIL Open Font License.
Shape and space
- Buttons, cards, panels and tables have 6 px corners. Map tiles and tags have 4 px. Chart bars round their top corners by 3 px. Cards in social posts have 12 px.
- Lines are 1 px hairlines; the chart baseline is in ink.
- Space separates groups; rows inside a group stay close.
- Controls are at least 44 px high.
Finding states
| State | Shape |
|---|---|
| Open | A ring in ink |
| Claimed | A half-filled ring in ink |
| With your agents | An accent ring with an accent centre |
| Disputed | A muted ring with a slash |
| Resolved | A filled accent circle; the finding struck through |
A state is never shown by colour alone.
Charts
- Sprint chart: bars start at zero. Earlier sprints are grey, the current sprint is warm steel, and each bar carries its value.
- Module map: tile size and colour strength both follow the number of open findings, and a caption says so. Each tile carries its module name and count.
- Score by quarter follows the sprint chart's rules.
- The score is a plain number on the 0 to 100 scale, with its change. Never a percentage.
Pictures
Product moments only: the sprint chart, the module map, the team view and the reports. No stock photos, avatars or faces, and nothing that reads as certification, such as shields or seals. Every illustrative figure carries the Example tag.
Formats
| Format | Size | Mode |
|---|---|---|
| Website | Fluid, content up to 1200 px wide | Light and dark |
| Team view | Designed at 1440 px wide | Light and dark |
| Sprint review report | 1200 by 900 on screen | Light |
| CTO report | A4 | Light, for print |
| LinkedIn post | 1080 by 1350 | Light and dark |
Accessibility
Every design meets WCAG 2.2 AA in both modes, and chart bars reach 3:1 against their card. States carry words and shapes. Focus is always visible. Every layout works at 320 px wide.
On this page
- Version
- v1
- Published
- 29 October 2026
- Signed by
- Jimmy Borchsigned with a login · 29 October 2026
- sha256
- 00caf60ee96e659eb03fc271aa50eff2
5c41ae88f1d39722f126efcfe72b8ca7
Go deeper
GuideWhich gate to add firstRelated guideGuideSet your survey cadence, and the daily watchRelated guideGuideSecurity is not a CVE listRelated guide