CSCS Study Guide ContentsAll the numbersMock exam Design system
Extracted Design Language

Design System

The complete visual language of this study guide — colors, type, spacing, components, and motion — extracted from the built pages, audited against WCAG 2.1, and documented so any page added later stays consistent.

11 color tokens3 type families2px base unitWCAG AA both themes56 figures

What the audit found, and what changed

An automated extraction across 292 elements scored the system 89/100, with perfect marks for color discipline, spacing, and border-radius consistency — but 29 WCAG contrast failures.

The cause: the five accent colors were defined once and reused in both themes. #e63a00 on white measures 4.23:1 against a 4.5:1 requirement for small text; amber #f5a524 measured 2.04:1. Since red and amber are exactly the colors that mark high-yield content and memory hooks, the most important material was the hardest to read.

The extraction reported these as light-mode problems. They were not only light-mode problems — a direct measurement found #e63a00 at 3.74:1 on the dark raised surface as well, and the tertiary text token failing in both themes.

Fixed: each theme now gets its own accent values at identical hue and saturation, with only lightness moved — darker on white, lighter on black. The vivid #e63a00 survives as --red-br for the chapter rule and pill borders, where the 3:1 requirement for large text and UI components applies.

Color

Nine colors, no gradients, no shadows. Three carry meaning and must never be used decoratively.

Semantic accents — these encode meaning

#e63a00
Red — high yield--red · dark #ff4607 · light #be3000
#f5a524
Amber — memory hook--amber · light #976007
#a97bff
Purple — exam trap--purple · light #803bff
#4aa3ff
Blue — definition--blue · light #0069d6
#2ecc71
Green — correct answer--green · light #1c7b44

Neutrals — dark theme (default)

#0e1116
Page--bg
#151a22
Surface--bg2
#1c232d
Raised--bg3
#2b3442
Line--line
#e6ebf2
Text--tx
#a9b4c2
Muted--tx2

Neutrals — light theme

#fbfaf8
Page--bg
#ffffff
Surface--bg2
#f2f0ec
Raised--bg3
#ddd8d0
Line--line
#16191d
Text--tx
#4c545e
Muted--tx2

Contrast audit — before and after

Worst-case ratio for each token, at the smallest size it is actually rendered
TokenWasRatioLightDarkWorst ground
--red#e63a004.23#be3000 5.04#ff4607 4.62.hy box · --bg3
--amber#f5a5242.04#976007 4.62#f5a524 7.49--bg3
--green#2ecc712.10#1c7b44 5.29#2ecc71 8.31--bg2
--blue#4aa3ff2.63#0069d6 5.26#4aa3ff 6.63--bg2
--purple#a97bff3.02#803bff 4.68#a97bff 5.19.pit box
--tx3#7a828c3.73#666d75 4.60#818c99 4.63--bg3
--red-br——#e63a00 in both themes · 3.71Borders and 3px rules only — 3:1 applies
--red-solid——#ca3300 in both themes · white text 5.27Filled controls carrying white text

Three rounds were needed. The first pass fixed the five accents against plain surfaces; a second found dark mode failing too (#e63a00 was 3.74:1 on the raised surface); a third caught text sitting on tinted grounds — the red-tinted .hi table row and the .hy / .mem / .pit boxes drop the effective ratio by roughly 0.2, which pushed #ca3300 back under 4.5 and forced #be3000.

How this is kept from regressing

node build/contrast.js audits every text token against every background it actually appears on — the three surfaces plus the five tinted composites — in both themes, and exits non-zero on any failure. A live sweep over the rendered pages confirms it: 20,758 text nodes across the full guide, zero failures in either theme.

Typography

Three families, each with one job. Body copy is system sans; the serif appears only in lead paragraphs and book titles; monospace carries every label, number, and code value.

h1 · 800 · -.02em
clamp(30px, 4.6vw, 46px)
Periodization
h2 · 800 · 27px
The four elements of negligence
h3 · 700 · 17.5px
Depth jump box heights
body · 400 · 16.5px
line-height 1.62
Speed is the most sensitive quality and declines first.
lead · serif · 19px
Every table, value, and formula you need.
caption · mono · 11.5px
.12em · uppercase
Table 21.4 — five training types
pill · mono · 11px
.08em · uppercase
Very high yield 1:10 / 1:15 / 1:20
numeric · mono · tabular
100 ft² · 68–74 °F · 1:20 · 3.5 mL·kg⁻¹·min⁻¹
Font stacks
TokenStackUsed for
--sans-apple-system, BlinkMacSystemFont, Segoe UI, Inter, Helvetica, ArialBody, headings, UI
--serifIowan Old Style, Palatino Linotype, GeorgiaLead paragraphs, book titles
--monoui-monospace, SF Mono, Menlo, ConsolasLabels, captions, all numbers

System stacks only — no webfonts, so pages render instantly offline and print without network access.

Spacing, Radii, Motion

Base unit 2px. Container 1180px with 26px gutters.

2px · hairline
5px · pill pad Y
14px · grid gap
26px · gutter
40px · box pad
52px · h2 top
70px · section
120px · page tail
Radii, elevation, motion
PropertyValueApplied to
radius sm4pxInline code, small chips
radius lg12pxEvery card, box, table wrapper, figure
radius full999pxPills — 110 instances
elevationnoneFlat by design: 1px borders carry all separation
transition0.14sThe only duration in the system
hover lifttranslateY(-2px)Chapter cards only
breakpoint720pxSingle breakpoint, max-width
z-index50One layer — the sticky top bar

Components

Six content containers. Each has one meaning; using the wrong one is a content error, not a style choice.

High yield — .hy

Red border, red-tinted fill. Opens every chapter with the ranked list of what is actually tested. Never used for ordinary emphasis.

Memory hook — .mem

Amber. A mnemonic, an anchor, or the reason a number is not round — like mirrors at 20 inches because a plate is 18 inches across.

Exam trap — .pit

Purple. The distractor the exam actually uses, and why it is wrong. Always names the wrong answer explicitly.

Definition — .def · Blue left rule. A term stated the way the exam states it.

Neutral box — .box

Supporting lists and protocol steps that carry no special weight.

100 ft²Number card — .num. A value that must be recalled exactly, in monospace at 22px.
1 : 20College professional-to-participant ratio
0.25 sFast versus slow stretch–shortening cycle

Figures

All 54 diagrams are inline SVG using the palette tokens — never hardcoded hex — so they retheme automatically and print as vectors. Text inside figures uses the same monospace and sans stacks as the page.

Figure rules

  1. Color by token only: var(--red), var(--amber), var(--purple), var(--muted), currentColor. A hardcoded hex breaks dark mode.
  2. Never scale below legibility. Every figure carries an explicit width and an inline min-width set to 80% of that width. It shrinks to fit down to that floor, then the figure — not the page — scrolls horizontally. Measured on the blueprint chart: 11px labels at 1440px and 1180px, 10.3px at 900px, and 8.8px from 768px down to 375px, with no sideways page scroll at any width. Without the floor, that chart rendered its labels at 5.1px on a narrow viewport.
  3. Caption states the takeaway, not what the picture contains.
  4. No decorative figures. A diagram earns its place by showing a mechanism, a sequence, or a threshold that a table cannot.
Every figure is built from these five tokens var(--red) high yield var(--amber) memory hook var(--purple) exam trap currentColor structure var(--muted) annotation Switch your system between light and dark — every stroke and label above retheme without a repaint of the markup. This figure shrinks to 80% of its natural width, then scrolls — so these labels never fall below 8.8px.
The five figure tokens, and the two rules that keep diagrams legible on every screen

System score

100
Color discipline
100
Spacing system
100
Border radius
90
Typography consistency
85
Elevation consistency
AA
Contrast (was 74/100)

Extraction scored the system 89/100 before the fix, with accessibility the only category below 85. Every text token now clears WCAG AA in both themes at the smallest size it is actually rendered at — verified by build/contrast.js, which fails the build if any pair regresses. Dark mode needed correcting too: #e63a00 measured 3.74:1 on the raised surface and is now #ff4607.