spirewise 1.7.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -15
- package/bin/cli.js +65 -37
- package/install.sh +3 -3
- package/package.json +2 -4
- package/skills/README.md +0 -1
- package/skills/ai-agent-os-design-system/README.md +105 -0
- package/skills/ai-agent-os-design-system/SKILL.md +195 -0
- package/skills/ai-agent-os-design-system/accessibility-system.md +67 -0
- package/skills/ai-agent-os-design-system/color-system.md +102 -0
- package/skills/ai-agent-os-design-system/component-library.md +147 -0
- package/skills/ai-agent-os-design-system/design-principles.md +79 -0
- package/skills/ai-agent-os-design-system/example-page-structures.md +93 -0
- package/skills/ai-agent-os-design-system/layout-system.md +74 -0
- package/skills/ai-agent-os-design-system/motion-system.md +85 -0
- package/skills/ai-agent-os-design-system/spacing-system.md +87 -0
- package/skills/ai-agent-os-design-system/typography-system.md +91 -0
- package/skills/ai-agent-os-design-system/website-generation-rules.md +192 -0
- package/skills/ai-dark-futuristic-design-system/README.md +91 -0
- package/skills/ai-dark-futuristic-design-system/SKILL.md +179 -0
- package/skills/ai-dark-futuristic-design-system/accessibility-system.md +61 -0
- package/skills/ai-dark-futuristic-design-system/color-system.md +99 -0
- package/skills/ai-dark-futuristic-design-system/component-library.md +140 -0
- package/skills/ai-dark-futuristic-design-system/design-principles.md +66 -0
- package/skills/ai-dark-futuristic-design-system/example-page-structures.md +124 -0
- package/skills/ai-dark-futuristic-design-system/layout-system.md +85 -0
- package/skills/ai-dark-futuristic-design-system/motion-system.md +76 -0
- package/skills/ai-dark-futuristic-design-system/spacing-system.md +73 -0
- package/skills/ai-dark-futuristic-design-system/typography-system.md +89 -0
- package/skills/ai-dark-futuristic-design-system/website-generation-rules.md +220 -0
- package/skills/apple-premium-minimal-design-system/README.md +95 -0
- package/skills/apple-premium-minimal-design-system/SKILL.md +166 -0
- package/skills/apple-premium-minimal-design-system/accessibility-system.md +60 -0
- package/skills/apple-premium-minimal-design-system/color-system.md +100 -0
- package/skills/apple-premium-minimal-design-system/component-library.md +136 -0
- package/skills/apple-premium-minimal-design-system/design-principles.md +65 -0
- package/skills/apple-premium-minimal-design-system/example-page-structures.md +90 -0
- package/skills/apple-premium-minimal-design-system/layout-system.md +89 -0
- package/skills/apple-premium-minimal-design-system/motion-system.md +75 -0
- package/skills/apple-premium-minimal-design-system/spacing-system.md +73 -0
- package/skills/apple-premium-minimal-design-system/typography-system.md +86 -0
- package/skills/apple-premium-minimal-design-system/website-generation-rules.md +207 -0
- package/skills/bento-grid-design-system/README.md +97 -0
- package/skills/bento-grid-design-system/SKILL.md +185 -0
- package/skills/bento-grid-design-system/accessibility-system.md +54 -0
- package/skills/bento-grid-design-system/color-system.md +98 -0
- package/skills/bento-grid-design-system/component-library.md +138 -0
- package/skills/bento-grid-design-system/design-principles.md +72 -0
- package/skills/bento-grid-design-system/example-page-structures.md +91 -0
- package/skills/bento-grid-design-system/layout-system.md +93 -0
- package/skills/bento-grid-design-system/motion-system.md +81 -0
- package/skills/bento-grid-design-system/spacing-system.md +77 -0
- package/skills/bento-grid-design-system/typography-system.md +85 -0
- package/skills/bento-grid-design-system/website-generation-rules.md +193 -0
- package/skills/brutalist-tech-design-system/README.md +100 -0
- package/skills/brutalist-tech-design-system/SKILL.md +185 -0
- package/skills/brutalist-tech-design-system/accessibility-system.md +61 -0
- package/skills/brutalist-tech-design-system/color-system.md +101 -0
- package/skills/brutalist-tech-design-system/component-library.md +117 -0
- package/skills/brutalist-tech-design-system/design-principles.md +73 -0
- package/skills/brutalist-tech-design-system/example-page-structures.md +92 -0
- package/skills/brutalist-tech-design-system/layout-system.md +74 -0
- package/skills/brutalist-tech-design-system/motion-system.md +80 -0
- package/skills/brutalist-tech-design-system/spacing-system.md +86 -0
- package/skills/brutalist-tech-design-system/typography-system.md +94 -0
- package/skills/brutalist-tech-design-system/website-generation-rules.md +195 -0
- package/skills/crunchbase-profile-generator/README.md +64 -0
- package/skills/crunchbase-profile-generator/SKILL.md +189 -0
- package/skills/editorial-luxury-design-system/README.md +98 -0
- package/skills/editorial-luxury-design-system/SKILL.md +187 -0
- package/skills/editorial-luxury-design-system/accessibility-system.md +63 -0
- package/skills/editorial-luxury-design-system/color-system.md +95 -0
- package/skills/editorial-luxury-design-system/component-library.md +131 -0
- package/skills/editorial-luxury-design-system/design-principles.md +77 -0
- package/skills/editorial-luxury-design-system/example-page-structures.md +94 -0
- package/skills/editorial-luxury-design-system/layout-system.md +80 -0
- package/skills/editorial-luxury-design-system/motion-system.md +82 -0
- package/skills/editorial-luxury-design-system/spacing-system.md +77 -0
- package/skills/editorial-luxury-design-system/typography-system.md +107 -0
- package/skills/editorial-luxury-design-system/website-generation-rules.md +194 -0
- package/skills/enterprise-data-viz-design-system/README.md +98 -0
- package/skills/enterprise-data-viz-design-system/SKILL.md +195 -0
- package/skills/enterprise-data-viz-design-system/accessibility-system.md +68 -0
- package/skills/enterprise-data-viz-design-system/color-system.md +112 -0
- package/skills/enterprise-data-viz-design-system/component-library.md +142 -0
- package/skills/enterprise-data-viz-design-system/design-principles.md +75 -0
- package/skills/enterprise-data-viz-design-system/example-page-structures.md +89 -0
- package/skills/enterprise-data-viz-design-system/layout-system.md +75 -0
- package/skills/enterprise-data-viz-design-system/motion-system.md +86 -0
- package/skills/enterprise-data-viz-design-system/spacing-system.md +85 -0
- package/skills/enterprise-data-viz-design-system/typography-system.md +100 -0
- package/skills/enterprise-data-viz-design-system/website-generation-rules.md +196 -0
- package/skills/f6s-copywriting/README.md +16 -6
- package/skills/f6s-copywriting/SKILL.md +162 -46
- package/skills/glassmorphism-design-system/README.md +98 -0
- package/skills/glassmorphism-design-system/SKILL.md +190 -0
- package/skills/glassmorphism-design-system/accessibility-system.md +62 -0
- package/skills/glassmorphism-design-system/color-system.md +128 -0
- package/skills/glassmorphism-design-system/component-library.md +120 -0
- package/skills/glassmorphism-design-system/design-principles.md +77 -0
- package/skills/glassmorphism-design-system/example-page-structures.md +92 -0
- package/skills/glassmorphism-design-system/layout-system.md +81 -0
- package/skills/glassmorphism-design-system/motion-system.md +86 -0
- package/skills/glassmorphism-design-system/spacing-system.md +73 -0
- package/skills/glassmorphism-design-system/typography-system.md +90 -0
- package/skills/glassmorphism-design-system/website-generation-rules.md +195 -0
- package/skills/linkedin-copywriting/README.md +15 -8
- package/skills/linkedin-copywriting/SKILL.md +129 -51
- package/skills/motion-storytelling-design-system/README.md +100 -0
- package/skills/motion-storytelling-design-system/SKILL.md +191 -0
- package/skills/motion-storytelling-design-system/accessibility-system.md +71 -0
- package/skills/motion-storytelling-design-system/color-system.md +101 -0
- package/skills/motion-storytelling-design-system/component-library.md +122 -0
- package/skills/motion-storytelling-design-system/design-principles.md +81 -0
- package/skills/motion-storytelling-design-system/example-page-structures.md +91 -0
- package/skills/motion-storytelling-design-system/layout-system.md +79 -0
- package/skills/motion-storytelling-design-system/motion-system.md +116 -0
- package/skills/motion-storytelling-design-system/spacing-system.md +83 -0
- package/skills/motion-storytelling-design-system/typography-system.md +89 -0
- package/skills/motion-storytelling-design-system/website-generation-rules.md +200 -0
- package/skills/nvidia-inception-idea-booster/README.md +43 -24
- package/skills/nvidia-inception-idea-booster/SKILL.md +260 -116
- package/skills/nvidia-inception-starter/README.md +6 -5
- package/skills/nvidia-inception-starter/SKILL.md +80 -43
- package/skills/nvidia-product-inventor/README.md +44 -40
- package/skills/nvidia-product-inventor/SKILL.md +265 -247
- package/skills/nvidia-startup-idea-founder/README.md +66 -26
- package/skills/nvidia-startup-idea-founder/SKILL.md +245 -189
- package/skills/product-demo-first-design-system/README.md +96 -0
- package/skills/product-demo-first-design-system/SKILL.md +185 -0
- package/skills/product-demo-first-design-system/accessibility-system.md +58 -0
- package/skills/product-demo-first-design-system/color-system.md +109 -0
- package/skills/product-demo-first-design-system/component-library.md +142 -0
- package/skills/product-demo-first-design-system/design-principles.md +66 -0
- package/skills/product-demo-first-design-system/example-page-structures.md +95 -0
- package/skills/product-demo-first-design-system/layout-system.md +76 -0
- package/skills/product-demo-first-design-system/motion-system.md +82 -0
- package/skills/product-demo-first-design-system/spacing-system.md +74 -0
- package/skills/product-demo-first-design-system/typography-system.md +87 -0
- package/skills/product-demo-first-design-system/website-generation-rules.md +194 -0
- package/skills/website-design-skills/01-proof/README.md +0 -47
- package/skills/website-design-skills/01-proof/SKILL.md +0 -303
- package/skills/website-design-skills/02-kajabi/README.md +0 -42
- package/skills/website-design-skills/02-kajabi/SKILL.md +0 -272
- package/skills/website-design-skills/03-lattice/README.md +0 -42
- package/skills/website-design-skills/03-lattice/SKILL.md +0 -271
- package/skills/website-design-skills/04-petal/README.md +0 -42
- package/skills/website-design-skills/04-petal/SKILL.md +0 -271
- package/skills/website-design-skills/05-dropbox-sign/README.md +0 -42
- package/skills/website-design-skills/05-dropbox-sign/SKILL.md +0 -271
- package/skills/website-design-skills/06-distributional/README.md +0 -42
- package/skills/website-design-skills/06-distributional/SKILL.md +0 -271
- package/skills/website-design-skills/07-appcues/README.md +0 -42
- package/skills/website-design-skills/07-appcues/SKILL.md +0 -271
- package/skills/website-design-skills/08-memberstack/README.md +0 -42
- package/skills/website-design-skills/08-memberstack/SKILL.md +0 -271
- package/skills/website-design-skills/09-flank/README.md +0 -42
- package/skills/website-design-skills/09-flank/SKILL.md +0 -275
- package/skills/website-design-skills/10-slidebean/README.md +0 -42
- package/skills/website-design-skills/10-slidebean/SKILL.md +0 -275
- package/skills/website-design-skills/11-formstack/README.md +0 -42
- package/skills/website-design-skills/11-formstack/SKILL.md +0 -275
- package/skills/website-design-skills/12-thalamus/README.md +0 -42
- package/skills/website-design-skills/12-thalamus/SKILL.md +0 -275
- package/skills/website-design-skills/13-grow/README.md +0 -42
- package/skills/website-design-skills/13-grow/SKILL.md +0 -275
- package/skills/website-design-skills/14-gemnote/README.md +0 -42
- package/skills/website-design-skills/14-gemnote/SKILL.md +0 -275
- package/skills/website-design-skills/15-draftbit/README.md +0 -42
- package/skills/website-design-skills/15-draftbit/SKILL.md +0 -275
- package/skills/website-design-skills/16-payman/README.md +0 -42
- package/skills/website-design-skills/16-payman/SKILL.md +0 -273
- package/skills/website-design-skills/17-effortel/README.md +0 -42
- package/skills/website-design-skills/17-effortel/SKILL.md +0 -272
- package/skills/website-design-skills/18-adopt/README.md +0 -42
- package/skills/website-design-skills/18-adopt/SKILL.md +0 -273
- package/skills/website-design-skills/19-kraftful/README.md +0 -42
- package/skills/website-design-skills/19-kraftful/SKILL.md +0 -273
- package/skills/website-design-skills/20-greenhouse/README.md +0 -42
- package/skills/website-design-skills/20-greenhouse/SKILL.md +0 -273
- package/skills/website-design-skills/21-weavy/README.md +0 -42
- package/skills/website-design-skills/21-weavy/SKILL.md +0 -273
- package/skills/website-design-skills/22-safetykit/README.md +0 -42
- package/skills/website-design-skills/22-safetykit/SKILL.md +0 -273
- package/skills/website-design-skills/23-modulify/README.md +0 -42
- package/skills/website-design-skills/23-modulify/SKILL.md +0 -270
- package/skills/website-design-skills/24-realm/README.md +0 -42
- package/skills/website-design-skills/24-realm/SKILL.md +0 -270
- package/skills/website-design-skills/25-modyfi/README.md +0 -42
- package/skills/website-design-skills/25-modyfi/SKILL.md +0 -269
- package/skills/website-design-skills/26-altitude/README.md +0 -42
- package/skills/website-design-skills/26-altitude/SKILL.md +0 -270
- package/skills/website-design-skills/27-way/README.md +0 -42
- package/skills/website-design-skills/27-way/SKILL.md +0 -270
- package/skills/website-design-skills/28-zentail/README.md +0 -42
- package/skills/website-design-skills/28-zentail/SKILL.md +0 -270
- package/skills/website-design-skills/29-zams/README.md +0 -42
- package/skills/website-design-skills/29-zams/SKILL.md +0 -270
- package/skills/website-design-skills/30-user-interviews/README.md +0 -44
- package/skills/website-design-skills/30-user-interviews/SKILL.md +0 -273
- package/skills/website-design-skills/31-bland/README.md +0 -44
- package/skills/website-design-skills/31-bland/SKILL.md +0 -273
- package/skills/website-design-skills/32-nauto/README.md +0 -44
- package/skills/website-design-skills/32-nauto/SKILL.md +0 -273
- package/skills/website-design-skills/33-bill/README.md +0 -44
- package/skills/website-design-skills/33-bill/SKILL.md +0 -273
- package/skills/website-design-skills/34-localyzer/README.md +0 -44
- package/skills/website-design-skills/34-localyzer/SKILL.md +0 -273
- package/skills/website-design-skills/35-jasper/README.md +0 -44
- package/skills/website-design-skills/35-jasper/SKILL.md +0 -273
- package/skills/website-design-skills/README.md +0 -108
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Design Principles — Enterprise Data Visualization
|
|
2
|
+
|
|
3
|
+
The philosophy distilled from data-led references (Stripe, Linear, Vercel/Analytics,
|
|
4
|
+
Datadog, Grafana, Retool, Mixpanel, Notion) and modern AI sites (OpenAI, Anthropic,
|
|
5
|
+
Perplexity, Cursor, Scale AI). The guiding standard: **clarity, honesty, and trust** — the
|
|
6
|
+
craft of good information design (Tufte) applied to a polished enterprise product site.
|
|
7
|
+
|
|
8
|
+
## The one-sentence philosophy
|
|
9
|
+
|
|
10
|
+
**Let the data speak, honestly.** Build a calm, precise canvas where dashboards, charts,
|
|
11
|
+
KPIs, and tables are the heroes — maximizing data-ink, minimizing chart-junk, and never
|
|
12
|
+
distorting the numbers.
|
|
13
|
+
|
|
14
|
+
## Core principles
|
|
15
|
+
|
|
16
|
+
1. **Data is the hero.** Lead with real-looking dashboards, charts, KPI tiles, and metrics —
|
|
17
|
+
not abstract illustration. The product's value is its numbers; show them.
|
|
18
|
+
2. **Clarity over decoration (data-ink).** Every pixel earns its place: thin gridlines,
|
|
19
|
+
direct labels, generous whitespace. Remove anything that isn't data or essential context.
|
|
20
|
+
3. **Honesty is non-negotiable.** Axes start at a sensible baseline (usually 0 for bars);
|
|
21
|
+
never truncate/invert/cherry-pick scales to exaggerate; label units and time ranges; show
|
|
22
|
+
sample sizes where relevant. Misleading charts destroy enterprise trust.
|
|
23
|
+
4. **A disciplined data palette.** Use a small **categorical** set for series (distinct,
|
|
24
|
+
color-blind-safe), **sequential** scales for magnitude, **diverging** scales for
|
|
25
|
+
above/below a midpoint, and **semantic deltas** for change — never color alone.
|
|
26
|
+
5. **Tabular precision.** Numerals are tabular and right-aligned; units consistent; deltas
|
|
27
|
+
show direction + value (▲ +12.4%). Tables are crisp, scannable, sortable.
|
|
28
|
+
6. **Restrained, neutral UI.** The interface is mostly neutral so the data's color pops.
|
|
29
|
+
One brand accent for actions/links; chart color is reserved for series, not chrome.
|
|
30
|
+
7. **Choose the right chart for the message.** Trend → line/area; comparison → bar; part-to-
|
|
31
|
+
whole → stacked/donut (sparingly); distribution → histogram/box; relationship → scatter;
|
|
32
|
+
single value → KPI/sparkline. Don't force a pie where a bar is clearer.
|
|
33
|
+
8. **Density with legibility.** Enterprise users want information density, but it must stay
|
|
34
|
+
readable — consistent spacing, alignment, and grouping make dense layouts calm.
|
|
35
|
+
9. **Accessible data.** Every chart has a **data-table equivalent** + summary; encodings work
|
|
36
|
+
without color (labels, patterns, direct values); keyboard/screen-reader reachable.
|
|
37
|
+
10. **Trust signals throughout.** Security, compliance, SLAs, real metrics, and customer
|
|
38
|
+
logos reinforce that this is enterprise-grade.
|
|
39
|
+
|
|
40
|
+
## Visual-hierarchy laws
|
|
41
|
+
|
|
42
|
+
- **One H1 per page**; in a dashboard, the **primary KPI / chart** is the focal point.
|
|
43
|
+
- **KPI → trend → detail.** Lead a data section with headline KPIs, then the trend chart,
|
|
44
|
+
then supporting tables/breakdowns.
|
|
45
|
+
- **Contrast ladder:** primary metric brightest/biggest, labels muted, gridlines faint.
|
|
46
|
+
- **One primary CTA per viewport** (a clear button), distinct from data color.
|
|
47
|
+
- **Align everything.** Numbers right-aligned, labels left; a strict baseline grid makes
|
|
48
|
+
dense data read as orderly.
|
|
49
|
+
- **Accent ≠ data color.** Keep the brand accent out of the categorical series to avoid
|
|
50
|
+
confusion; reserve it for actions.
|
|
51
|
+
|
|
52
|
+
## Chart-craft rules (data-ink in practice)
|
|
53
|
+
|
|
54
|
+
- No 3D, no drop shadows on data marks, no heavy gradient fills (a faint area fill is ok).
|
|
55
|
+
- Direct-label series (or a clear legend); avoid legends that force back-and-forth scanning.
|
|
56
|
+
- Gridlines are thin and few; remove chart borders; let whitespace frame the plot.
|
|
57
|
+
- Consistent axis scales when comparing charts side by side; annotate notable points.
|
|
58
|
+
- Format numbers humanely (1.2k, 3.4M, 12.4%), consistent decimals, with units.
|
|
59
|
+
|
|
60
|
+
## Reference cues (what each does well)
|
|
61
|
+
|
|
62
|
+
- **Datadog / Grafana:** dense, legible dashboards; clear time-series; status colors.
|
|
63
|
+
- **Stripe:** beautiful, honest charts; refined tables; trust + clarity.
|
|
64
|
+
- **Linear / Vercel Analytics:** minimal precise metrics, tasteful sparklines, fast feel.
|
|
65
|
+
- **Mixpanel / Retool:** funnels, breakdowns, builder/dashboard density done cleanly.
|
|
66
|
+
|
|
67
|
+
## Do / Don't
|
|
68
|
+
|
|
69
|
+
**Do:** lead with real dashboards/KPIs/charts · maximize data-ink · honest axes · categorical/
|
|
70
|
+
sequential/diverging scales used correctly · tabular numerals · crisp tables · neutral UI +
|
|
71
|
+
data color · data-table for every chart · color-blind-safe encodings.
|
|
72
|
+
|
|
73
|
+
**Don't:** chart-junk (3D/shadows/gradients on data) · misleading axes · rainbow scales for
|
|
74
|
+
ordered data · color-only encoding · pie charts for many categories · illegible dense tables ·
|
|
75
|
+
brand accent inside the series · borders between sections · charting libraries.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Example Page Structures — Enterprise Data Visualization
|
|
2
|
+
|
|
3
|
+
Ready-to-assemble, **data-led** page blueprints. Each section names a layout (see
|
|
4
|
+
`layout-system.md`) and components (see `component-library.md`). Lead with dashboards, KPIs, and
|
|
5
|
+
charts; keep the UI neutral so data pops; **every chart has a data-table equivalent**. No
|
|
6
|
+
borders between sections (separate by whitespace + surface elevation + background tone).
|
|
7
|
+
|
|
8
|
+
Legend: `DH-* / KR / CG / TB / FN / BN / F-* / P-* / C-* / Q-* / FT-*` layouts · components by name.
|
|
9
|
+
|
|
10
|
+
## MANDATORY: 15+ page site map (≈20), 10+ sections/page, clean URLs
|
|
11
|
+
|
|
12
|
+
Always ship a **full multipage website with 15+ pages (≈20)** — never a single landing page.
|
|
13
|
+
Every page carries **at least 10 sections (≈12)**, **no borders/dividers between sections**, pure
|
|
14
|
+
HTML/CSS/vanilla JS (**charts = inline SVG/Canvas, no library**), **extensionless URLs**. Required
|
|
15
|
+
20-page map:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/ Home /customers Customers
|
|
19
|
+
/platform Platform /case-studies Case Studies
|
|
20
|
+
/solutions Solutions /developers Developers
|
|
21
|
+
/products Products /docs Documentation ← + DOC-A subpages
|
|
22
|
+
/features Features /about About
|
|
23
|
+
/ai-agents AI Agents /careers Careers
|
|
24
|
+
/enterprise Enterprise /blog Blog ← + article pages
|
|
25
|
+
/security Security /contact Contact
|
|
26
|
+
/pricing Pricing /partners Partners
|
|
27
|
+
/resources Resources /faq FAQ
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Each blueprint below is a **10-section** skeleton — extend toward 12, never fewer than 10. Every
|
|
31
|
+
page must include: **Hero (dashboard/metric) · Feature Sections · Product Highlights · Trust
|
|
32
|
+
Signals · Testimonials · Use Cases · Statistics (KPI row) · Integrations · CTA · Footer.**
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 1. Home (default)
|
|
37
|
+
1. **Navbar** — extensionless links
|
|
38
|
+
2. **Hero** `DH-A` — copy + CTAs + **Dashboard Preview** (KPI row + primary chart + mini table)
|
|
39
|
+
3. **Logos Section** — trusted-by row
|
|
40
|
+
4. **KPI row** `KR` — 4 headline platform metrics (value, delta, sparkline)
|
|
41
|
+
5. **Chart grid** `CG` — primary trend (`.span-8`) + breakdown (`.span-4`)
|
|
42
|
+
6. **Feature** `F-C` — feature copy + a live mini chart
|
|
43
|
+
7. **Table / breakdown** `TB` — a sortable data table (segments, with inline bars)
|
|
44
|
+
8. **Testimonials** — quote + a customer result KPI/chart
|
|
45
|
+
9. **Pricing** `P-A` (or teaser) — usage/seat tiers
|
|
46
|
+
10. **CTA** `C-A` + **Footer** `FT-A`
|
|
47
|
+
|
|
48
|
+
## 2. Platform / Product
|
|
49
|
+
1. Navbar · 2. **Hero** `DH-A` (Dashboard Preview) · 3. **KPI row** · 4. **Chart grid** (trend +
|
|
50
|
+
funnel `FN`) · 5. Feature `F-B` (copy↔chart) · 6. **Dashboard Preview** (APP shell, range picker)
|
|
51
|
+
· 7. Table section · 8. Integrations · 9. Statistics/trust · 10. CTA + Footer
|
|
52
|
+
|
|
53
|
+
## 3. Features / Analytics
|
|
54
|
+
1. Navbar · 2. **Hero** `DH-C` (single big chart) · 3.–8. feature sections each pairing copy with
|
|
55
|
+
the relevant chart type (trend/line, comparison/bar, distribution/histogram, funnel, scatter,
|
|
56
|
+
heatmap) + a data table · 9. Integrations · 10. CTA + Footer
|
|
57
|
+
|
|
58
|
+
## 4. Developers / Documentation
|
|
59
|
+
- **Developers:** Navbar · **Hero** with **Code Preview** (analytics SDK/query) + the chart it
|
|
60
|
+
produces · Logos · Code Preview (tabbed) · KPI row (API metrics) · Use Cases · Statistics · CTA
|
|
61
|
+
("Read docs"/"Get API key") · Footer (≥10).
|
|
62
|
+
- **Docs:** `DOC-A` three-pane; inline charts + data tables; mono code; breadcrumb; sticky nav.
|
|
63
|
+
|
|
64
|
+
## 5. Enterprise / Security
|
|
65
|
+
1. Navbar · 2. Hero (outcome-led + SLA chart) · 3. Logos · 4. Feature `F-B` · 5. **Enterprise**
|
|
66
|
+
(SSO/RBAC/SLAs/VPC + usage chart) · 6. **Security** (compliance badges) · 7. **KPI row** (uptime/
|
|
67
|
+
p99/events) · 8. Testimonials (exec) · 9. CTA (contact) · 10. Footer
|
|
68
|
+
|
|
69
|
+
## 6. Pricing
|
|
70
|
+
1. Navbar · 2. Hero (short + plan/usage toggle) · 3. **Pricing** `P-A/P-B` (tiers, usage chart) ·
|
|
71
|
+
4. Feature/usage comparison table · 5. Enterprise band · 6. Logos · 7. **KPI row** (value metrics)
|
|
72
|
+
· 8. Testimonials · 9. **FAQ** `Q-A` · 10. CTA + Footer (keep pricing tables crisp + honest)
|
|
73
|
+
|
|
74
|
+
## 7. Content pages (About, Customers, Case Studies, Careers, Blog, Partners, Resources, Contact, FAQ)
|
|
75
|
+
Reach **≥10 sections** with data where it helps: Hero → body sections (customer logo grid,
|
|
76
|
+
**case-study with before/after KPIs + a chart**, values, open roles, article list, partner tiers,
|
|
77
|
+
resource cards, contact form) → Trust Signals → **KPI row** → Testimonials → Integrations → CTA →
|
|
78
|
+
Footer. Case studies especially lead with **result metrics + a chart**.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Assembly notes
|
|
83
|
+
- **Scale is mandatory:** 15+ pages, **≥10 sections each**. Never a single/thin page.
|
|
84
|
+
- **Lead with data** (KPI → trend → detail); choose the right chart for each message; keep axes
|
|
85
|
+
honest; maximize data-ink; **every chart has a data-table equivalent**.
|
|
86
|
+
- **Neutral UI, colorful data;** tabular numerals; crisp tables; brand accent for actions only.
|
|
87
|
+
- **No borders/dividers between sections** — whitespace + surface elevation + background tone.
|
|
88
|
+
Gridlines/edges/row rules live inside components.
|
|
89
|
+
- Use **real, plausible data** (not lorem numbers); mark guesses `[PLACEHOLDER]`.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Layout & Grid System — Enterprise Data Visualization
|
|
2
|
+
|
|
3
|
+
A 12-column fluid grid + canonical **dashboard** and **marketing** layouts. Data sections use
|
|
4
|
+
a compact dashboard grid (KPI rows, chart grids); marketing sections use airier layouts.
|
|
5
|
+
**No borders between sections.**
|
|
6
|
+
|
|
7
|
+
## Grid
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root { --grid-cols: 12; --grid-gap: var(--dash-gap); }
|
|
11
|
+
|
|
12
|
+
.grid { display: grid; gap: var(--grid-gap);
|
|
13
|
+
grid-template-columns: repeat(var(--grid-cols), 1fr); }
|
|
14
|
+
.cols-2 { grid-template-columns: repeat(2, 1fr); }
|
|
15
|
+
.cols-3 { grid-template-columns: repeat(3, 1fr); }
|
|
16
|
+
.cols-4 { grid-template-columns: repeat(4, 1fr); }
|
|
17
|
+
.cols-6 { grid-template-columns: repeat(6, 1fr); }
|
|
18
|
+
.split { grid-template-columns: 1fr 1.2fr; }
|
|
19
|
+
|
|
20
|
+
/* Dashboard span helpers (on a 12-col grid) */
|
|
21
|
+
.span-3{grid-column:span 3} .span-4{grid-column:span 4} .span-6{grid-column:span 6}
|
|
22
|
+
.span-8{grid-column:span 8} .span-12{grid-column:span 12}
|
|
23
|
+
@media (max-width:1024px){ .span-3,.span-4{grid-column:span 6} .span-8{grid-column:span 12} }
|
|
24
|
+
@media (max-width:680px){ [class*="span-"]{grid-column:1 / -1} .cols-2,.cols-3,.cols-4,.cols-6{grid-template-columns:1fr} }
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Breakpoints: `sm 480` · `md 768` · `lg 1024` · `xl 1280` · `2xl 1440`. Mobile-first;
|
|
28
|
+
dashboards reflow many columns → fewer → single; tables scroll or stack.
|
|
29
|
+
|
|
30
|
+
## Canonical layouts
|
|
31
|
+
|
|
32
|
+
### Hero
|
|
33
|
+
- **DH-A Dashboard hero (default):** copy + CTAs on one side, a **Dashboard Preview** (KPI row
|
|
34
|
+
+ a chart + a mini table) on the other (or full-width below). Lead with real-looking data.
|
|
35
|
+
- **DH-B Metric hero:** a giant headline **KPI** (`--fs-kpi-lg`) + sparkline + supporting
|
|
36
|
+
stats — the "by the numbers" opener.
|
|
37
|
+
- **DH-C Split:** copy left, a single large primary chart right.
|
|
38
|
+
|
|
39
|
+
### Data sections
|
|
40
|
+
- **KR KPI row:** `.grid.cols-4` (→2→1) of **KPI tiles** (value, label, delta, sparkline).
|
|
41
|
+
- **CG Chart grid:** mixed-span chart cards (`.span-8` primary trend + `.span-4` breakdown;
|
|
42
|
+
`.span-6` × 2). One primary chart anchors; supporting charts around it.
|
|
43
|
+
- **TB Table section:** a full **data table** (sortable, sticky header) with filters above.
|
|
44
|
+
- **FN Funnel / breakdown:** a funnel or stacked-bar breakdown + a segments table.
|
|
45
|
+
- **BN Bento of data:** a bento mixing a chart tile, KPI tiles, and a small table.
|
|
46
|
+
|
|
47
|
+
### Feature / marketing
|
|
48
|
+
- **F-A 3-up feature cards** · **F-B alternating copy↔chart** · **F-C feature + live chart**.
|
|
49
|
+
|
|
50
|
+
### Pricing / CTA / FAQ / Footer
|
|
51
|
+
- **P-A 3-tier** (middle highlighted) + usage/seat note; **P-B 2-tier + enterprise**. Tiers may
|
|
52
|
+
show a small usage chart. **C-A CTA band** (distinct from data color). **Q-A Accordion FAQ.**
|
|
53
|
+
**FT-A Mega footer.**
|
|
54
|
+
|
|
55
|
+
### Dashboard app / Docs
|
|
56
|
+
- **APP Dashboard shell:** left sidebar (nav/filters) + top bar (range picker, search) + a
|
|
57
|
+
responsive dashboard grid — the in-product layout shown in previews.
|
|
58
|
+
- **DOC-A Three-pane docs:** nav · prose (`--container-md`) · TOC; inline charts/tables; mono
|
|
59
|
+
code blocks; breadcrumb.
|
|
60
|
+
|
|
61
|
+
## Composition rules
|
|
62
|
+
|
|
63
|
+
1. **Separate sections by surface/tone + space, NEVER borders.** Alternate `--bg-900`/`--bg-800`
|
|
64
|
+
(add `.section--alt`); `.section{border:0}`; no `<hr>`. Chart gridlines/table rules/card
|
|
65
|
+
edges are *inside* components, not section dividers.
|
|
66
|
+
2. **Lead data sections with KPIs**, then the trend chart, then tables/breakdowns (KPI → trend
|
|
67
|
+
→ detail). One primary chart per data section.
|
|
68
|
+
3. **Right chart for the message** (see design-principles): trend→line/area, comparison→bar,
|
|
69
|
+
composition→stacked/donut, distribution→histogram, relationship→scatter, single→KPI/spark.
|
|
70
|
+
4. **Align to the grid.** Dashboard cards snap to the 12-col grid; numbers right-aligned.
|
|
71
|
+
5. **At least 10 sections per page**, **15+ pages.** Never thin.
|
|
72
|
+
6. **Rhythm:** dashboard hero → logos/trust → KPI row → chart grid → feature (copy↔chart) →
|
|
73
|
+
table/breakdown → metrics/trust → pricing → FAQ → CTA → footer.
|
|
74
|
+
7. **Reflow:** dashboard grids collapse columns; tables get a horizontal scroll container or
|
|
75
|
+
stack into key/value cards on mobile; charts stay legible (fewer ticks) at small sizes.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Motion System — Enterprise Data Visualization
|
|
2
|
+
|
|
3
|
+
Motion here is **functional and restrained** — it clarifies data (a chart draws in, a value
|
|
4
|
+
transitions, a tooltip appears), never decorates. Precision and calm signal trustworthiness.
|
|
5
|
+
Everything degrades under `prefers-reduced-motion`, and **no motion is required to read data**.
|
|
6
|
+
|
|
7
|
+
Distilled from Stripe/Linear/Vercel (crisp micro-interactions), Datadog/Grafana (clear
|
|
8
|
+
tooltips/transitions), and OpenAI/Anthropic/Perplexity/Cursor (restraint).
|
|
9
|
+
|
|
10
|
+
## Tokens
|
|
11
|
+
|
|
12
|
+
```css
|
|
13
|
+
:root {
|
|
14
|
+
--dur-fast: 120ms; --dur-base: 220ms; --dur-slow: 420ms; --dur-chart: 700ms;
|
|
15
|
+
--ease-out: cubic-bezier(0.2, 1, 0.3, 1);
|
|
16
|
+
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Principles
|
|
21
|
+
1. **Motion clarifies, never decorates.** Animate to show change (a trend draw-in, a value
|
|
22
|
+
ticking to its number, a series toggling) — not for flourish.
|
|
23
|
+
2. **Short + eased** for UI (120–420ms); chart draw-ins up to ~700ms, once on reveal.
|
|
24
|
+
3. **Compositor-friendly + cheap.** Animate `transform`/`opacity`/`stroke-dashoffset`/
|
|
25
|
+
`clip-path`; avoid layout thrash. rAF-throttle scroll; `IntersectionObserver` for reveals.
|
|
26
|
+
4. **One animation per data section** at a glance — don't animate every chart simultaneously.
|
|
27
|
+
5. **Final state is the truth.** With motion off, charts/values render fully and correctly.
|
|
28
|
+
|
|
29
|
+
## Patterns
|
|
30
|
+
|
|
31
|
+
- **Chart draw-in (on reveal):** line/area draws via `stroke-dashoffset` 1→0; bars grow from
|
|
32
|
+
baseline (`transform: scaleY` from 0, origin bottom); donut sweeps. `--dur-chart`, once.
|
|
33
|
+
- **Value count-up:** KPI numbers count from a sensible start to the final value on reveal —
|
|
34
|
+
**final value is in the DOM** so it's correct without JS/motion.
|
|
35
|
+
- **Tooltip / crosshair:** on hover **and keyboard focus** of a data point, show a tooltip
|
|
36
|
+
(value + label) and a crosshair; fade `--dur-fast`. Tooltips are also reachable by keyboard.
|
|
37
|
+
- **Series toggle:** clicking a legend item fades a series in/out (`opacity`) and rescales
|
|
38
|
+
smoothly; `aria-pressed` reflects state.
|
|
39
|
+
- **Table sort:** on sort, rows reorder with a brief fade/translate (`--dur-base`); never
|
|
40
|
+
obscure the data; reduced motion → instant reorder.
|
|
41
|
+
- **Reveal:** sections/cards fade-rise on enter (IO), gentle stagger; calm.
|
|
42
|
+
- **Hover:** card lift (subtle shadow), button bg shift, row hover background.
|
|
43
|
+
- **Range change:** when the date range/filter changes, charts/KPIs transition values smoothly
|
|
44
|
+
(interpolate) rather than snapping — but keep it quick (`--dur-base`).
|
|
45
|
+
- **Nav on scroll:** subtle background/shadow after ~24px.
|
|
46
|
+
|
|
47
|
+
## Reduced motion (required)
|
|
48
|
+
|
|
49
|
+
```css
|
|
50
|
+
@media (prefers-reduced-motion: reduce) {
|
|
51
|
+
*, *::before, *::after { animation-duration:.001ms !important;
|
|
52
|
+
animation-iteration-count:1 !important; transition-duration:.001ms !important;
|
|
53
|
+
scroll-behavior:auto !important; }
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
Under reduced motion: charts render in **final drawn state** (full paths/bars), KPI numbers at
|
|
57
|
+
**final value** (no count-up), table sort is instant, no draw-in/parallax. All data is fully
|
|
58
|
+
legible immediately.
|
|
59
|
+
|
|
60
|
+
## Minimal vanilla helpers
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
const RM = matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
64
|
+
// chart draw-in on reveal (SVG path with stroke-dasharray set to its length)
|
|
65
|
+
const io = new IntersectionObserver((es)=>es.forEach(e=>{ if(e.isIntersecting){
|
|
66
|
+
const el=e.target;
|
|
67
|
+
if(!RM) el.classList.add('draw'); // CSS animates stroke-dashoffset → 0
|
|
68
|
+
else el.classList.add('drawn'); // final state instantly
|
|
69
|
+
io.unobserve(el);
|
|
70
|
+
}}, {threshold:.3});
|
|
71
|
+
document.querySelectorAll('[data-chart]').forEach(el=>io.observe(el));
|
|
72
|
+
|
|
73
|
+
// count-up (final value always present in textContent as data-final)
|
|
74
|
+
function countUp(el){ const end=+el.dataset.final; if(RM){ el.textContent=el.dataset.display; return; }
|
|
75
|
+
const t0=performance.now(), d=700;
|
|
76
|
+
(function f(t){ const p=Math.min(1,(t-t0)/d); el.textContent=fmt(end*p); if(p<1)requestAnimationFrame(f); else el.textContent=el.dataset.display; })(performance.now());
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
```css
|
|
80
|
+
[data-chart] path.series{ stroke-dasharray: var(--len); stroke-dashoffset: var(--len); }
|
|
81
|
+
[data-chart].draw path.series{ transition: stroke-dashoffset var(--dur-chart) var(--ease-out); stroke-dashoffset:0; }
|
|
82
|
+
[data-chart].drawn path.series{ stroke-dashoffset:0; }
|
|
83
|
+
[data-reveal]{ opacity:0; transform: translateY(14px);
|
|
84
|
+
transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); }
|
|
85
|
+
[data-reveal].in{ opacity:1; transform:none; }
|
|
86
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Spacing System — Enterprise Data Visualization
|
|
2
|
+
|
|
3
|
+
A strict **4-point base / 8-point rhythm** tuned for **two densities**: spacious **marketing**
|
|
4
|
+
sections and compact **dashboard/product** UI. Whitespace, surface elevation, and tone
|
|
5
|
+
separate content — never borders.
|
|
6
|
+
|
|
7
|
+
## Scale tokens
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root {
|
|
11
|
+
/* 4-pt base, 8-pt rhythm */
|
|
12
|
+
--space-0: 0; --space-1: 4px; --space-2: 8px; --space-3: 12px;
|
|
13
|
+
--space-4: 16px; --space-5: 20px; --space-6: 24px; --space-8: 32px;
|
|
14
|
+
--space-10: 40px; --space-12: 48px; --space-16: 64px; --space-20: 80px;
|
|
15
|
+
--space-24: 96px; --space-28: 112px;--space-32: 128px;--space-40: 160px;
|
|
16
|
+
|
|
17
|
+
/* Radii — crisp, enterprise (smaller than playful systems) */
|
|
18
|
+
--radius-sm: 6px; --radius-md: 8px; --radius-lg: 12px;
|
|
19
|
+
--radius-xl: 16px; --radius-pill: 999px;
|
|
20
|
+
|
|
21
|
+
/* Containers */
|
|
22
|
+
--container-sm: 680px; --container-md: 840px; --container-lg: 1080px;
|
|
23
|
+
--container-xl: 1240px; --container-2xl: 1440px; /* wide dashboards */
|
|
24
|
+
--gutter: clamp(20px, 4vw, 40px);
|
|
25
|
+
|
|
26
|
+
/* Section rhythm (marketing) */
|
|
27
|
+
--section-y: clamp(64px, 8vw, 120px);
|
|
28
|
+
--section-y-lg: clamp(88px, 10vw, 160px);
|
|
29
|
+
|
|
30
|
+
/* Dashboard density (compact) */
|
|
31
|
+
--dash-gap: clamp(12px, 1.2vw, 20px); /* gap between dashboard cards/tiles */
|
|
32
|
+
--card-pad: clamp(16px, 1.6vw, 24px); /* padding inside a data card */
|
|
33
|
+
--cell-pad-y: 10px; --cell-pad-x: 12px; /* table cell padding (compact) */
|
|
34
|
+
--kpi-pad: var(--space-5);
|
|
35
|
+
--stack: clamp(12px, 1.4vw, 20px);
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Two densities
|
|
40
|
+
|
|
41
|
+
- **Marketing density** (hero, features, pricing, CTA): generous — `--section-y` padding,
|
|
42
|
+
larger type, more whitespace. Sells the product.
|
|
43
|
+
- **Dashboard density** (dashboard previews, KPI rows, chart grids, tables): compact —
|
|
44
|
+
`--dash-gap` between tiles, `--card-pad` inside cards, tight `--cell-pad-*` in tables.
|
|
45
|
+
Information-rich but aligned and calm.
|
|
46
|
+
|
|
47
|
+
Use the right density per context; don't make a dashboard preview as airy as a hero, and
|
|
48
|
+
don't cram marketing copy as tightly as a table.
|
|
49
|
+
|
|
50
|
+
## Usage map
|
|
51
|
+
|
|
52
|
+
- **4-pt** (`--space-1..6`): inside components — KPI label↔value, icon↔text, chart padding,
|
|
53
|
+
table cell padding, badge/button padding.
|
|
54
|
+
- **8-pt** (`--space-8..16`): between components — card gaps (`--dash-gap`), KPI rows, form rows.
|
|
55
|
+
- **Container widths:** marketing `--container-lg/xl`; **wide dashboards** `--container-2xl`;
|
|
56
|
+
prose/docs `--container-md`.
|
|
57
|
+
- **Section spacing:** marketing sections `--section-y` (hero/CTA `--section-y-lg`); a
|
|
58
|
+
dashboard *section* still gets `--section-y`, but the dashboard *grid inside* uses `--dash-gap`.
|
|
59
|
+
- **Grid gaps:** `--dash-gap` for dashboard/chart grids; `--space-6/8` for marketing grids.
|
|
60
|
+
- **Page spacing:** sections stack with no extra margins and **no borders/dividers** —
|
|
61
|
+
`--section-y` + surface elevation + tone separate them.
|
|
62
|
+
|
|
63
|
+
## Rules
|
|
64
|
+
|
|
65
|
+
1. **Only use scale values.** No arbitrary `13px`/`27px` (except the deliberate cell-pad/density tokens).
|
|
66
|
+
2. **Align to a baseline.** Consistent paddings + alignment make dense data read as orderly.
|
|
67
|
+
3. **Consistent card radius/padding** across all data cards so a dashboard reads as one system.
|
|
68
|
+
4. **Tables breathe just enough:** `--cell-pad` compact but tappable; row height ≥ 36px;
|
|
69
|
+
zebra/hover via background, not borders between rows where avoidable.
|
|
70
|
+
5. **Whitespace + elevation > dividers.** Separate sections this way, never lines.
|
|
71
|
+
|
|
72
|
+
## Helpers
|
|
73
|
+
|
|
74
|
+
```css
|
|
75
|
+
.container { width:100%; max-width: var(--container-xl);
|
|
76
|
+
margin-inline:auto; padding-inline: var(--gutter); }
|
|
77
|
+
.container--wide { max-width: var(--container-2xl); }
|
|
78
|
+
.section { padding-block: var(--section-y); border: 0; } /* never a section border */
|
|
79
|
+
.section--lg { padding-block: var(--section-y-lg); }
|
|
80
|
+
.section--alt { background: var(--bg-800); } /* alternate tone, not a line */
|
|
81
|
+
.dash { display:grid; gap: var(--dash-gap); }
|
|
82
|
+
.card { background: var(--surface-1); border:1px solid var(--border-default);
|
|
83
|
+
border-radius: var(--radius-lg); padding: var(--card-pad); }
|
|
84
|
+
.stack > * + * { margin-top: var(--stack); }
|
|
85
|
+
```
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Typography System — Enterprise Data Visualization
|
|
2
|
+
|
|
3
|
+
Clean, neutral, highly legible type built for **numbers and density**: a precise sans with a
|
|
4
|
+
true **tabular-numeral** mode for all metrics, tables, and axes, plus mono for code/IDs.
|
|
5
|
+
Restrained and functional — type supports the data, it doesn't perform. Fluid scale.
|
|
6
|
+
|
|
7
|
+
## Fonts
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root {
|
|
11
|
+
--font-sans: "Inter", "Geist", "IBM Plex Sans", -apple-system, BlinkMacSystemFont,
|
|
12
|
+
"Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
13
|
+
--font-display: var(--font-sans);
|
|
14
|
+
/* Numeric/mono — for metrics, tables, axes, IDs, code */
|
|
15
|
+
--font-num: "Geist Mono", "IBM Plex Mono", "JetBrains Mono", ui-monospace, Menlo, monospace;
|
|
16
|
+
--font-mono: var(--font-num);
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
Notes:
|
|
20
|
+
- Inter/Geist/IBM Plex have excellent **tabular figures** — use `font-variant-numeric:
|
|
21
|
+
tabular-nums` for all metrics, deltas, table cells, and axis ticks so digits align.
|
|
22
|
+
- A mono (`--font-num`) is great for large KPI numbers, IDs, timestamps, and code/terminal.
|
|
23
|
+
|
|
24
|
+
## Fluid type scale (clamp)
|
|
25
|
+
|
|
26
|
+
```css
|
|
27
|
+
:root {
|
|
28
|
+
--fs-display: clamp(2.25rem, 1.5rem + 3.4vw, 3.75rem); /* 36 → 60px hero */
|
|
29
|
+
--fs-h1: clamp(2rem, 1.5rem + 2.4vw, 3rem); /* 32 → 48px */
|
|
30
|
+
--fs-h2: clamp(1.5rem, 1.2rem + 1.6vw, 2.25rem); /* 24 → 36px section */
|
|
31
|
+
--fs-h3: clamp(1.25rem, 1.1rem + 0.8vw, 1.625rem); /* 20 → 26px panel title */
|
|
32
|
+
--fs-h4: clamp(1.0625rem, 1rem + 0.4vw, 1.25rem); /* 17 → 20px */
|
|
33
|
+
--fs-lead: clamp(1.0625rem, 1rem + 0.5vw, 1.3125rem);/* 17 → 21px */
|
|
34
|
+
--fs-body: 0.9375rem; /* 15px base (dense, enterprise) */
|
|
35
|
+
--fs-body-lg: 1.0625rem; /* 17px marketing body */
|
|
36
|
+
--fs-small: 0.8125rem; /* 13px caption / table / axis */
|
|
37
|
+
--fs-micro: 0.6875rem; /* 11px chart tick / dense label */
|
|
38
|
+
|
|
39
|
+
/* KPI numbers */
|
|
40
|
+
--fs-kpi: clamp(1.75rem, 1.3rem + 1.8vw, 2.75rem); /* 28 → 44px headline metric */
|
|
41
|
+
--fs-kpi-lg: clamp(2.5rem, 1.8rem + 2.6vw, 3.75rem); /* 40 → 60px hero metric */
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Roles (each: family · size · weight · line-height · tracking)
|
|
46
|
+
|
|
47
|
+
| Role | Family | Size | Weight | LH | Tracking |
|
|
48
|
+
|---|---|---|---|---|---|
|
|
49
|
+
| **Display** (hero) | sans | `--fs-display` | 600–700 | 1.06 | -0.02em |
|
|
50
|
+
| **H1** | sans | `--fs-h1` | 600–700 | 1.08 | -0.02em |
|
|
51
|
+
| **H2** (section) | sans | `--fs-h2` | 600 | 1.15 | -0.015em |
|
|
52
|
+
| **H3** (panel title) | sans | `--fs-h3` | 600 | 1.25 | -0.01em |
|
|
53
|
+
| **Eyebrow / label** | sans | `--fs-micro` | 600 | 1.2 | 0.08em, UPPERCASE |
|
|
54
|
+
| **Lead / deck** | sans | `--fs-lead` | 400 | 1.5 | 0 |
|
|
55
|
+
| **Body** | sans | `--fs-body`/`-lg` | 400 | 1.6 | 0 |
|
|
56
|
+
| **KPI number** | num | `--fs-kpi`/`-lg` | 600–700 | 1 | -0.01em · tabular-nums |
|
|
57
|
+
| **KPI label** | sans | `--fs-small` | 500 | 1.3 | 0.02em |
|
|
58
|
+
| **Delta** | num | `--fs-small` | 600 | 1 | 0 · tabular-nums (▲/▼ + value) |
|
|
59
|
+
| **Table header** | sans | `--fs-small` | 600 | 1.3 | 0.02em, UPPERCASE optional |
|
|
60
|
+
| **Table cell (number)** | num | `--fs-small` | 400–500 | 1.4 | 0 · tabular-nums, right-aligned |
|
|
61
|
+
| **Table cell (text)** | sans | `--fs-small` | 400 | 1.4 | 0 |
|
|
62
|
+
| **Axis tick / legend** | num/sans | `--fs-micro` | 400–500 | 1.2 | 0 · tabular-nums |
|
|
63
|
+
| **Button** | sans | `--fs-body` | 600 | 1 | 0 |
|
|
64
|
+
| **Navigation** | sans | `--fs-small`/`--fs-body` | 500 | 1 | 0 |
|
|
65
|
+
| **Pricing amount** | num | `clamp(2.25rem,1.8rem+2vw,3.25rem)` | 700 | 1 | -0.02em · tabular-nums |
|
|
66
|
+
| **Code / ID / timestamp** | num | `--fs-small` | 400–500 | 1.5 | 0 |
|
|
67
|
+
|
|
68
|
+
## Rules (numbers-first)
|
|
69
|
+
|
|
70
|
+
1. **Tabular numerals everywhere data appears** — metrics, deltas, tables, axes, pricing:
|
|
71
|
+
`font-variant-numeric: tabular-nums`. Digits must align in columns and not shift on update.
|
|
72
|
+
2. **Right-align numeric table columns; left-align text.** Headers match their column.
|
|
73
|
+
3. **Format humanely & consistently:** 1.2k / 3.4M / 12.4% / $4,210; fixed decimals per
|
|
74
|
+
column; units in the header or beside the KPI (not repeated per cell when avoidable).
|
|
75
|
+
4. **Deltas: direction + sign + color + arrow** (▲ +12.4% in `--good`; ▼ −3.1% in `--bad`).
|
|
76
|
+
5. **Dense but legible:** body 15px in product/dashboard contexts, 17px for marketing prose;
|
|
77
|
+
table line-height ~1.4; never below ~13px for data you expect users to read.
|
|
78
|
+
6. **Restraint:** sans only (no decorative faces); weight + size + tabular alignment carry
|
|
79
|
+
hierarchy. Mono for big KPI numbers/IDs/code adds the "instrument" feel.
|
|
80
|
+
7. **Measure** marketing prose ≤ 68ch; data labels are short and direct.
|
|
81
|
+
|
|
82
|
+
## Base CSS
|
|
83
|
+
|
|
84
|
+
```css
|
|
85
|
+
body { font-family: var(--font-sans); font-size: var(--fs-body); line-height: 1.6;
|
|
86
|
+
color: var(--text-secondary); -webkit-font-smoothing: antialiased;
|
|
87
|
+
text-rendering: optimizeLegibility; }
|
|
88
|
+
h1,h2,h3 { color: var(--text-primary); font-family: var(--font-display); font-weight: 600;
|
|
89
|
+
text-wrap: balance; letter-spacing: -0.015em; }
|
|
90
|
+
h1 { font-size: var(--fs-h1); line-height: 1.08; }
|
|
91
|
+
.eyebrow { font-size: var(--fs-micro); font-weight:600; letter-spacing:.08em;
|
|
92
|
+
text-transform:uppercase; color: var(--text-muted); }
|
|
93
|
+
.num, .kpi__value, .delta, td.num, th.num, .axis, .legend, .price__amount {
|
|
94
|
+
font-family: var(--font-num); font-variant-numeric: tabular-nums; }
|
|
95
|
+
td.num, th.num { text-align: right; }
|
|
96
|
+
.delta--up { color: var(--good); } .delta--down { color: var(--bad); }
|
|
97
|
+
.delta--flat { color: var(--neutral); }
|
|
98
|
+
a { color: var(--accent); text-underline-offset: 2px; }
|
|
99
|
+
p { max-width: 68ch; }
|
|
100
|
+
```
|