This file is the source of truth for idstack's visual system. Any visual or UI decision (font, color, spacing, radius, motion) must be grounded here. The canonical implementation is templates/assets/idstack.css (per-skill HTML reports + course dashboard); when this file changes, that implementation updates in the same PR. The idstack.org landing page (docs/index.html) is an intentional separate dark/indigo surface that no longer tracks this report token system (see Decisions log, 2026-06-12).
- What this is: Open-source set of skills for evidence-based instructional design. Runs in Claude Code and OpenAI Codex CLI. 11 skills, 108 peer-reviewed studies across 11 research domains, every recommendation tagged with its evidence tier T1–T5.
- Who it's for: Instructional designers (university, K-12, corporate L&D), faculty doing their own course design, course-design teams. Downstream stakeholders: deans, faculty senates, accreditation reviewers — they read the HTML reports the designer hands them.
- Space: Edtech / instructional design. Adjacent inspiration: open-access academic publishing (eLife), evidence-based-medicine reference (UpToDate, Cochrane), modern dev tools (Linear, Cursor).
- Project type: Hybrid — three surfaces share one system:
- Marketing landing (
idstack.org) — drives discovery + install. Uses a distinct dark/indigo aesthetic, separate from the report system. - CLI tool — terminal interaction, text-only, design-irrelevant.
- Stakeholder deliverables — branded HTML reports +
index.htmlcourse dashboard under.idstack/exports/<course-slug>/. Audience: designer + their stakeholders.
- Marketing landing (
Proof. This is evidence applied to course design — every claim is cited and tier-rated, like a clinical reference. Every design decision serves this. The visual hierarchy is built around tier badges and citations; the artifact survives a dean's skepticism on first read.
- Direction: Academic publication × clinical reference. eLife meets UpToDate. The product feels like a peer-reviewed deliverable, not a SaaS dashboard.
- Decoration level: Minimal-with-purpose. The only decoration is functional — tier-color borders on findings, severity-coded chips, mono citation marks. No gradients, no illustrations, no stock photos, no decorative blobs anywhere.
- Mood: Quiet authority. The page rhythm is set by typography and tier markers. Reads as defensible without needing to be told it's defensible.
- Reference sites consulted: elifesciences.org (energy + restraint), uptodate.com (evidence-tier convention), linear.app (modern restraint). Anti-references (what NOT to do): qualitymatters.org (association look), stripe.com gradient hero (overused signature pattern).
-
Display + body: Source Serif 4 (Adobe / open source). Body-serif is the deliberate commitment — every paragraph reinforces the publication mood. Source Serif 4 has multiple optical sizes (
opszaxis) so the same family handles 13px captions through 65px hero headlines without going off-design. -
UI / labels / badges / table cells: Public Sans (USWDS / open source). Designed for US-government documents; reads as "official record" rather than "SaaS chrome." Anti-Inter.
-
Citations / IDs / code / file paths: JetBrains Mono (open source). Citations like
[Alignment-14] [T1]are the academic-paper convention rendered in mono — load-bearing, not decorative. -
Loading: Google Fonts via one
<link>in each HTML surface (docs/index.html,templates/report.html.tmpl,templates/index.html.tmpl). System-font fallbacks are preserved in--font-*tokens so the page is legible even when the network is unavailable. Total weight ~120kb woff2 for the variable axes used. -
Scale (modular, ratio 1.250 — major third), base 1rem = 17px:
Token rem px Role h13.82 65 Page title (report header, landing hero) h22.44 41 Section heading h31.95 33 Subsection heading h41.56 27 Finding card title h51.25 21 Inline emphasis heading body1.00 17 Default paragraph small0.80 14 Captions, mono citations, badges -
Line heights: 1.65 body · 1.20 display · 1.40 UI.
Restrained. Two-color annotation set (rust + prussian blue) for primary marks; tier and severity palettes do the work of differentiating findings.
Background / ink / rules:
| Token | Hex | Role |
|---|---|---|
--bg |
#faf8f3 |
Pristine ivory — pages, page backgrounds. NOT pure white (too sterile), NOT parchment-warm (too cozy). |
--raised |
#ffffff |
Card / surface backgrounds — finding cards, swatches. |
--ink |
#1a1815 |
Body text and primary headings. Warm near-black. |
--ink-soft |
#3a352e |
Secondary text, captions over --raised. |
--ink-muted |
#6b6358 |
Tertiary text — meta lines, finding-card labels. |
--rule |
#e6e0d2 |
Hairline rules, finding-card borders. |
--rule-strong |
#d4cdb9 |
Stronger dividers, table borders. |
Two-color annotation set (the strategic accent pair):
| Token | Hex | Role |
|---|---|---|
--accent |
#7a1f1f |
Library-stamp / annotation red. Page kickers, primary CTA, critical chips. Evokes academic editor's red pen. |
--accent-blue |
#1d4a5e |
Prussian blue. Hyperlinks, citation cross-references, "see also" markers. The second color in academic editing. |
--accent-soft |
#f4eae8 |
Tinted hover / fill for --accent surfaces. |
Evidence-tier palette (the heart of Proof):
| Token | Hex | Tier |
|---|---|---|
--tier-1 |
#2f7a4a |
T1 — Meta-analyses, RCTs (heaviest weight, deepest color) |
--tier-2 |
#2864a8 |
T2 — Quasi-experimental with controls |
--tier-3 |
#a87726 |
T3 — Systematic reviews of mixed evidence |
--tier-4 |
#b35a1f |
T4 — Observational without comparison |
--tier-5 |
#6b6b6b |
T5 — Expert opinion (lightest, grey to evoke weakness) |
Severity palette (finding-card left border + chip fill):
| Severity | fg | bg | Use |
|---|---|---|---|
| critical | #8c2515 |
#f5dcd5 |
Course will measurably fail learners. |
| warning | #7a4f0c |
#fbf0d9 |
Likely problem worth addressing. |
| info | #344566 |
#e7eaf1 |
Worth knowing, not blocking. |
Dark mode strategy: Auto via prefers-color-scheme: dark (the report stylesheet). Surfaces redesigned (not just inverted): inky-dark background #16140f, warm-cream text #ebe7dd, terracotta accent #d97461 replaces oxblood (oxblood loses too much chroma when inverted). All tier and severity tokens redefined with 10–20% saturation drop and adjusted backgrounds. The light theme is canonical; dark mode is a courtesy. The landing page is now dark-only (not a toggle), with its own indigo palette (#0a0a0f background, #6366f1→#a855f7 gradient accents), distinct from the report stylesheet dark mode described here.
- Base unit: 4px.
- Density: Comfortable. Academic-publishing convention — generous whitespace earns attention.
| Token | px | Use |
|---|---|---|
2xs |
2 | Tight inline gaps (badge padding) |
xs |
4 | Finding card border-left, button padding-y |
sm |
8 | Inline gaps between badges/chips |
md |
16 | Paragraph spacing, table cell padding |
lg |
24 | Section spacing within a card |
xl |
32 | Card-to-card spacing |
2xl |
48 | Section dividers |
3xl |
64 | Major page section spacing |
4xl |
96 | Hero spacing |
- Approach: Hybrid. Grid-disciplined for marketing landing; single-column prose for reports.
- Grid: 12-col desktop, 4-col mobile, gutter 24px.
- Max content width:
1120pxouter container (marketing) ·64chprose column (reports). - Optional Tufte side-notes: 200px right column for evidence callouts on long reports. Only used when there's lateral content worth surfacing — never as decoration.
Border radius (sharp by default — the publication signal):
| Token | px | Use |
|---|---|---|
none |
0 | Finding cards, table cells, surfaces |
sm |
2 | Buttons, install snippet, badges, chips |
md |
4 | Form inputs (rare) |
full |
9999 | Avatars only (none in current scope) |
- Approach: Minimal-functional. Academic publications don't animate.
| Token | Curve | Use |
|---|---|---|
enter |
cubic-bezier(0.2, 0, 0, 1) |
Hover, focus, theme toggle |
exit |
cubic-bezier(0.4, 0, 1, 1) |
Dismissal |
| Token | ms | Use |
|---|---|---|
micro |
50–100 | Hover, focus rings |
short |
200 | Theme toggle, dropdown reveal |
No medium / long durations. No scroll-driven animations. No parallax. No entrance animations on page load. prefers-reduced-motion: reduce disables all transitions.
- Gradient mesh hero (Stripe owns it; copying = derivative AI-slop). (Scope: this binds the report system. The marketing landing uses an indigo→purple gradient-ACCENT treatment by explicit decision — accent marks, not a full-bleed mesh hero background. See Decisions log, 2026-06-12.)
- Stock photo of person looking at laptop (Quality Matters does this; category cliché).
- 3-column or 5-column badge-icon feature grid (Quality Matters has FIVE; category cliché).
- Bright association blue + orange palette.
- "Built for X" / "Designed for Y" marketing copy.
- Inter, Roboto, Helvetica, Open Sans, Space Grotesk as primary fonts.
- Rounded card corners > 4px.
- Sans-serif body text (we go serif; that's the named risk).
- Centered-everything layouts.
- Decorative shadows or glows.
| Date | Decision | Rationale |
|---|---|---|
| 2026-05-13 | Initial design system created | /design-consultation after v3.0.0.0 shipped HTML reports. North-star: Proof. |
| 2026-05-13 | Body-serif (Source Serif 4) instead of sans | Deliberate departure from modern editorial sites' sans-body convention. Locks the publication mood every paragraph. Cost: ~2–3% screen readability on low-DPI; accepted. |
| 2026-05-13 | 0 border-radius on finding cards | Sharp corners signal "publication," not "consumer SaaS." Visual differentiation from category. Cost: feels austere on first encounter; accepted. |
| 2026-05-13 | No hero illustration / gradient / image anywhere | Type-only marketing hero. Anti-SaaS, anti-AI-slop. Cost: scroll-stoppage power; accepted. Open question for future if first-time-visitor metrics call for revisiting. |
| 2026-05-13 | Background ivory #faf8f3 (replaces parchment #fbfaf6) |
Cleaner publication feel. Parchment-warm read as "old book"; ivory reads as "good paper." |
| 2026-05-13 | Add prussian blue #1d4a5e as secondary accent |
Two-color annotation set (red + blue) mirrors how academic editors marked manuscripts. |
| 2026-06-12 | Landing reverted to original dark/indigo aesthetic, separate from the report system (owner request) | Reports retain scholarly ivory "Proof" identity. Landing uses indigo→purple gradient accents — a scoped exception to the no-gradient anti-pattern, which still binds reports. |