DesignMD Maker logo ← Home Report · Code analysis
L
Design System

Locomotive | Montreal web agency

Design system extracted from https://locomotive.ca/ on 2026-08-20 (code-based analysis).

Source · https://locomotive.ca/ Engine · Code analysis Created · Aug 20, 2026 17:42 Cost · $0.0000
Detected Language

Design Style

technical / mono accents
monospace font in use
Palette

Colors

primary
#DA382E
4.58 on white · 4.59 on black · 3° 70% 52%
secondary
#000000
21 on white · 1 on black · 0° 0% 0%
accent
#312DFB
7.24 on white · 2.9 on black · 241° 96% 58%
Token Roles 13 tokens
background
#FFFFFF · 21:1 vs black
surface
#F0F4F7 · 18.99:1 vs black
text-primary
#000000 · 21:1 vs white
text-secondary
#D4DAE0 · 14.9:1 vs black
border
#CCCCCC · 13.08:1 vs black
on-primary
#FFFFFF · 21:1 vs black
on-secondary
#FFFFFF · 21:1 vs black
on-accent
#FFFFFF · 21:1 vs black
surface-container-lowest
#FFFFFF · 21:1 vs black
surface-container-low
#F0F4F7 · 18.99:1 vs black
surface-container
#EAEFF2 · 18.13:1 vs black
surface-container-high
#E9EFF4 · 18.12:1 vs black
surface-container-highest
#E4EAED · 17.29:1 vs black
Detected Palette 19 colors by frequency in source CSS
#000000
used 22× · 0° 0% 0%
#FFFFFF
used 22× · 0° 0% 100%
#DA382E
used 5× · 3° 70% 52%
#312DFB
used 4× · 241° 96% 58%
#F0F4F7
used 3× · 206° 30% 95%
#D4DAE0
used 2× · 210° 16% 85%
#E9EFF4
used 2× · 207° 33% 94%
#CCCCCC
used 1× · 0° 0% 80%
#007AFF
used 1× · 211° 100% 50%
#2C2F31
used 1× · 204° 5% 18%
#5E6266
used 1× · 210° 4% 38%
#30363C
used 1× · 210° 11% 21%
#EAEFF2
used 1× · 203° 24% 93%
#667481
used 1× · 209° 12% 45%
#D5DEE2
used 1× · 198° 18% 86%
#DEE4E9
used 1× · 207° 20% 89%
#E4EAED
used 1× · 200° 20% 91%
#000002
used 1× · 240° 100% 0%
#808080
used 1× · 0° 0% 50%
Surface Treatments

Gradients

linear-gradient(180deg, rgba(0, 0, 0, 0.95) 0%, rgba(0, 0, 0, 0.7) 100%)
linear-gradient(0deg, rgba(255, 255, 255, 0) 0%, white 50%)
linear-gradient(0deg, rgba(218, 56, 46, 0) 0%, #da382e 50%)
linear-gradient(0deg, rgba(0, 0, 0, 0) 0%, black 50%)
Type System

Typography

headline-lg
inherit
32px · 400 · LH 1.2
Locomotive | Montreal web agency
headline-md
inherit
28px · 400 · LH 1.2
Locomotive | Montreal web agency
title-lg
inherit
21px · 400 · LH 1.4
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
body-lg
inherit
17px · 400 · LH 1.4
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
body-md
inherit
16px · 400 · LH 1.4
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
label-sm
inherit
12.8px · 400 · LH 1.4
Typography is the discipline of rendering language visible. Spacing, weight, and rhythm carry meaning long before words are read.
Detected Font Stacks
"LocomotiveNew",-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serifinheritmonospace,monospaceff("primary")"LocomotiveNew""HelveticaNowDisplay",-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif"swiper-icons"var(--cc-font-family)
Structure

Layout

Container
Section padding: · card padding:
Grid
12-column reference grid · gap
Spacing Scale
xs
5px
sm
8px
md
16px
lg
42.6666666672px
xl
64px
detected
5px
detected
.35em
detected
8px
detected
.5em
detected
10px
detected
.6666666667rem
detected
.67em
detected
1em
detected
1rem
detected
20px
Breakpoints
640px699px700px1024px1025px1199px1599px1999px
Depth

Elevation & Depth

level 1
0 .625em 1.875em rgba(0, 0, 2, 0.3)
Geometry

Shapes

md
6.4px
lg
16px
r3
.5rem
r4
.4rem
r5
4em
r6
1rem
Tokens in Context

Components

card
background{colors.surface}
border1px solid {colors.border}
radius16px
boxShadow{elevation.md}
button-primary
background{colors.primary}
radius6.4px
Animation

Motion

Keyframes 10 found
@keyframes preloaderAppear
0%{opacity:0;transform:scale(0.9) translate3d(0, 0, 0)}100%{opacity:1;transform:scale(1) translate3d(0, 0, 0)}
@keyframes swiper-preloader-spin
0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}
@keyframes spin
0%{transform:rotate(0deg)}to{transform:rotate(1turn)}
@keyframes shake
10%,90%{transform:translateX(-0.0625em)}20%,80%{transform:translateX(0.125em)}30%,50%,70%{transform:translateX(-0.25em)}40%,60%{transform:translateX(0.25em)}
@keyframes fall
0%{opacity:0;transform:scale(0.5);animation-timing-function:ease-out}70%{opacity:1;transform:scale(1.1);animation-timing-function:ease-in-out}to{transform:scale(1);animation-timing-function:ease-out}
@keyframes featuredProjectsAllFlash
0%,25%{content:""}26%,50%{content:"🔺"}51%,75%{content:""}76%,100%{content:"🕳"}
@keyframes lisaDisclaimerFlash
0%,50%{opacity:1}51%,100%{opacity:0}
@keyframes lisaDisclaimerProcedure
0%,50%{text-decoration:underline}51%,100%{text-decoration:none}
@keyframes lisaLoader
0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}
Applied Animations
preloaderAppear .9s cubic-bezier(0.215, 0.61, 0.355, 1) .3sfall .5s linear .125s bothfeaturedProjectsAllFlash 2s linear infinitenone
Easing Curves
cubic-bezier(0.215, 0.61, 0.355, 1)ease-outease-in-outcubic-bezier(0.23, 1, 0.32, 1)
Transitions
background-color .3s cubic-bezier(0.215, 0.61, 0.355, 1)opacity .9s cubic-bezier(0.215, 0.61, 0.355, 1)background-size .25s,color .25s easetransform .2s cubic-bezier(0.215, 0.61, 0.355, 1)width var(--transition-speed-leave) var(--transition-easing)opacity .6s cubic-bezier(0.215, 0.61, 0.355, 1)opacity .25s cubic-bezier(0.215, 0.61, 0.355, 1)transform .15s cubic-bezier(0.215, 0.61, 0.355, 1)
Proof

Live Preview

Complete Reference

Full design.md Specification

Design Specification — Locomotive | Montreal web agency

FieldValue
Site / Projecthttps://locomotive.ca/
Analyzed on2026-08-20
Analysis modeAutomated code extraction (no AI)

Overview

This design system was extracted programmatically from the source page. It is built on a light canvas (#FFFFFF), ink text (#000000), a vivid accent (#312DFB). All type is set in "LocomotiveNew",-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif. Detected font weights: 400, 600, 700. Detected style signatures: technical / mono accents.

Logo asset(s): https://locomotive.ca/assets/images/favicons/apple-touch-icon.png

Color System

Detected palette (by frequency)

HexRGBHSLCount
#0000000, 0, 00° 0% 0%22
#FFFFFF255, 255, 2550° 0% 100%22
#DA382E218, 56, 463° 70% 52%5
#312DFB49, 45, 251241° 96% 58%4
#F0F4F7240, 244, 247206° 30% 95%3
#D4DAE0212, 218, 224210° 16% 85%2
#E9EFF4233, 239, 244207° 33% 94%2
#CCCCCC204, 204, 2040° 0% 80%1
#007AFF0, 122, 255211° 100% 50%1
#2C2F3144, 47, 49204° 5% 18%1
#5E626694, 98, 102210° 4% 38%1
#30363C48, 54, 60210° 11% 21%1
#EAEFF2234, 239, 242203° 24% 93%1
#667481102, 116, 129209° 12% 45%1
#D5DEE2213, 222, 226198° 18% 86%1
#DEE4E9222, 228, 233207° 20% 89%1
#E4EAED228, 234, 237200° 20% 91%1
#0000020, 0, 2240° 100% 0%1
#808080128, 128, 1280° 0% 50%1

Assigned roles

Roles are taken from the page's own semantic CSS custom properties when present, otherwise inferred from usage frequency + luminance/saturation.

TokenHexRGBHSL
--color-primary#DA382E218, 56, 463° 70% 52%
--color-accent#312DFB49, 45, 251241° 96% 58%
--color-background#FFFFFF255, 255, 2550° 0% 100%
--color-surface#F0F4F7240, 244, 247206° 30% 95%
--color-text-primary#0000000, 0, 00° 0% 0%
--color-secondary#0000000, 0, 00° 0% 0%
--color-text-secondary#D4DAE0212, 218, 224210° 16% 85%
--color-border#CCCCCC204, 204, 2040° 0% 80%
--color-on-primary#FFFFFF255, 255, 2550° 0% 100%
--color-on-secondary#FFFFFF255, 255, 2550° 0% 100%
--color-on-accent#FFFFFF255, 255, 2550° 0% 100%

Surface ramp (derived from detected light neutrals)

TokenHex
--color-surface-container-lowest#FFFFFF
--color-surface-container-low#F0F4F7
--color-surface-container#EAEFF2
--color-surface-container-high#E9EFF4
--color-surface-container-highest#E4EAED

Gradients

  • linear-gradient(currentColor, currentColor)
  • linear-gradient(180deg, rgba(0, 0, 0, 0.95) 0%, rgba(0, 0, 0, 0.7) 100%)
  • linear-gradient(0deg, rgba(255, 255, 255, 0) 0%, white 50%)
  • linear-gradient(0deg, rgba(218, 56, 46, 0) 0%, #da382e 50%)
  • linear-gradient(0deg, rgba(0, 0, 0, 0) 0%, black 50%)

Typography

Primary typeface: LocomotiveNew — stack: "LocomotiveNew",-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif

Font stacks (most used first)

  • "LocomotiveNew",-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif
  • inherit
  • monospace,monospace
  • ff("primary")
  • "LocomotiveNew"
  • "HelveticaNowDisplay",-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif
  • "swiper-icons"
  • var(--cc-font-family)
  • -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"

Derived type scale

TokenSize
headline-lg32px
headline-md28px
title-lg21px
body-lg17px
body-md16px
label-sm12.8px

Font sizes (by frequency)

SizeCount
15px10
1em3
17px2
19px2
21px2
2em1
16px1
1.75em1
.8em1

Weights in use: 400, 600, 700

Line heights (by frequency)

ValueCount
1.214
1.34
13
1.152
01
1.11
1.41

Spacing

Derived spacing scale

TokenValue
xs5px
sm8px
md16px
lg42.6666666672px
xl64px

Raw values (by frequency)

ValueCount
1.3333333333rem3
0px3
8px2
.67em1
.35em1
1em1
2.6666666667rem1
20px1
1rem1
.5em1
10px1
5px1
.6666666667rem1
4rem1

Borders & Radius

Derived radius tokens

TokenValue
md6.4px
lg16px

Raw values (resolved, by frequency)

RadiusCount
04
.5rem2
.4rem1
4em1
1rem1

Shadows

Derived elevation

TokenValue
md0 .625em 1.875em rgba(0, 0, 2, 0.3)

All detected shadows

  • 0 .625em 1.875em rgba(0, 0, 2, 0.3)

Layout

Container max-width: 1024px

Grid columns (largest detected grid): 12

Breakpoints

  • 640px
  • 699px
  • 700px
  • 1024px
  • 1025px
  • 1199px
  • 1599px
  • 1999px

Animation & Motion

Transitions

  • background-color .3s cubic-bezier(0.215, 0.61, 0.355, 1)
  • opacity .9s cubic-bezier(0.215, 0.61, 0.355, 1)
  • background-size .25s,color .25s ease
  • transform .2s cubic-bezier(0.215, 0.61, 0.355, 1)
  • width
  • opacity .6s cubic-bezier(0.215, 0.61, 0.355, 1)
  • opacity .25s cubic-bezier(0.215, 0.61, 0.355, 1)
  • transform .15s cubic-bezier(0.215, 0.61, 0.355, 1)
  • opacity .15s cubic-bezier(0.23, 1, 0.32, 1),transform 0s cubic-bezier(0.23, 1, 0.32, 1) .15s

Easing curves

  • cubic-bezier(0.215, 0.61, 0.355, 1)
  • ease-out
  • ease-in-out
  • cubic-bezier(0.23, 1, 0.32, 1)

Keyframes

@keyframes preloaderAppear { 0%{opacity:0;transform:scale(0.9) translate3d(0, 0, 0)}100%{opacity:1;transform:scale(1) translate3d(0, 0, 0)} }
@keyframes swiper-preloader-spin { 0%{transform:rotate(0deg)}100%{transform:rotate(360deg)} }
@keyframes spin { 0%{transform:rotate(0deg)}to{transform:rotate(1turn)} }
@keyframes shake { 10%,90%{transform:translateX(-0.0625em)}20%,80%{transform:translateX(0.125em)}30%,50%,70%{transform:translateX(-0.25em)}40%,60%{transform:translateX(0.25em)} }
@keyframes fall { 0%{opacity:0;transform:scale(0.5);animation-timing-function:ease-out}70%{opacity:1;transform:scale(1.1);animation-timing-function:ease-in-out}to{transform:scale(1);animation-timing-function:ease-out} }
@keyframes featuredProjectsAllFlash { 0%,25%{content:""}26%,50%{content:"🔺"}51%,75%{content:""}76%,100%{content:"🕳"} }
@keyframes lisaDisclaimerFlash { 0%,50%{opacity:1}51%,100%{opacity:0} }
@keyframes lisaDisclaimerProcedure { 0%,50%{text-decoration:underline}51%,100%{text-decoration:none} }
@keyframes lisaLoader { 0%{transform:rotate(0deg)}100%{transform:rotate(360deg)} }
@keyframes lisaCursor { 0%{opacity:1}49%{opacity:1}50%{opacity:0}100%{opacity:0} }

Animations

  • preloaderAppear .9s cubic-bezier(0.215, 0.61, 0.355, 1) .3s
  • fall .5s linear .125s both
  • featuredProjectsAllFlash 2s linear infinite
  • none

CTA labels found on page

  • Let's talk
  • The dynasty
  • Agency
  • Careers
  • Subscribe

> Page contains canvas/WebGL elements — consider ambient effects layers.

Source Design Tokens (CSS custom properties)

:root {
  --color: #000000;
  --color-bg: #FFFFFF;
  --font-size: 15px;
  --spacing-micro-mobile: 8;
  --spacing-micro: 14;
  --spacing-tiny-mobile: 20;
  --spacing-tiny: 20;
  --spacing-small-mobile: 30;
  --spacing-small: 30;
  --spacing-medium-mobile: 40;
  --spacing-medium: 40;
  --spacing-large-mobile: 52;
  --spacing-large: 80;
  --spacing-big-mobile: 80;
  --spacing-big: 150;
  --spacing-huge-mobile: 100;
  --spacing-huge: 200;
  --spacing-enormous-mobile: 140;
  --spacing-enormous: 250;
  --border: solid var(--border-size);
  --grid-columns: 12;
  --grid-gutter: 20px;
  --grid-margin: 2.6666666667rem;
  --header-height: 4rem;
  --head-padding-vh: 0.25;
  --about-head-content-offset-vh: 0.15;
  --menu-color: #FFFFFF;
  --menu-color-bg: #312DFB;
  --font-size-medium: 1.7333333333rem;
  --font-size-huge: 7.6388888889vw;
  --font-size-h1: 4.6666666667rem;
  --font-size-h2: 1.7333333333rem;
  --font-size-h3: 1.4666666667rem;
  --font-size-h4: 1.3333333333rem;
  --font-size-h5: 1.2rem;
  --font-size-h6: 1.0666666667rem;
  --border-size: 2px;
  --swiper-theme-color: #007aff;
  --swiper-navigation-size: 44px;
  --cc-font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
  --cc-modal-border-radius: .5rem;
  --cc-btn-border-radius: .4rem;
  --cc-modal-transition-duration: .25s;
  --cc-link-color: var(--cc-btn-primary-bg);
  --cc-modal-margin: 1rem;
  --cc-z-index: 2147483647;
  --cc-bg: #fff;
  --cc-primary-color: #2c2f31;
  --cc-secondary-color: #5e6266;
  --cc-btn-primary-bg: #30363c;
  --cc-btn-primary-color: #fff;
  --cc-btn-primary-border-color: var(--cc-btn-primary-bg);
  --cc-btn-primary-hover-bg: #000;
  --cc-btn-primary-hover-color: #fff;
  --cc-btn-primary-hover-border-color: var(--cc-btn-primary-hover-bg);
  --cc-btn-secondary-bg: #eaeff2;
  --cc-btn-secondary-color: var(--cc-primary-color);
  --cc-btn-secondary-border-color: var(--cc-btn-secondary-bg);
  --cc-btn-secondary-hover-bg: #d4dae0;
  --cc-btn-secondary-hover-color: #000;
}

Do's and Don'ts

Do

  • Do reserve the accent #312DFB for interactive highlights and key moments — it is used sparingly on the source page.
  • Do keep the canvas at #FFFFFF; surfaces should stay within the detected neutral ramp.
  • Do stick to the detected font weight(s): 400, 600, 700.

Don't

  • Don't introduce colors outside the detected palette — every hue above was found in the source.

Design Tokens (copy-paste)

:root {
  --color-primary: #DA382E;
  --color-accent: #312DFB;
  --color-background: #FFFFFF;
  --color-surface: #F0F4F7;
  --color-text-primary: #000000;
  --color-secondary: #000000;
  --color-text-secondary: #D4DAE0;
  --color-border: #CCCCCC;
  --color-on-primary: #FFFFFF;
  --color-on-secondary: #FFFFFF;
  --color-on-accent: #FFFFFF;
  --color-surface-container-lowest: #FFFFFF;
  --color-surface-container-low: #F0F4F7;
  --color-surface-container: #EAEFF2;
  --color-surface-container-high: #E9EFF4;
  --color-surface-container-highest: #E4EAED;
  --font-sans: "LocomotiveNew",-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif;
  --font-size-headline-lg: 32px;
  --font-size-headline-md: 28px;
  --font-size-title-lg: 21px;
  --font-size-body-lg: 17px;
  --font-size-body-md: 16px;
  --font-size-label-sm: 12.8px;
  --radius-md: 6.4px;
  --radius-lg: 16px;
  --shadow-md: 0 .625em 1.875em rgba(0, 0, 2, 0.3);
  --space-xs: 5px;
  --space-sm: 8px;
  --space-md: 16px;
  --space-lg: 42.6666666672px;
  --space-xl: 64px;
  --container-max: 1024px;
}