North Star
DESIGN.md · §1Creative North Star
The Reference Atlas
ClimateScope is a navigable, trusted reference object. It reads less like an app and more like a regional climate atlas you can interrogate, with the API and the map as twin first-class surfaces. Authority is earned through completeness and source-disclosure, not through visual volume. Every screen carries the weight of editorial restraint: the surface gets out of the way so the data can speak.
The system rejects three traps explicitly named in PRODUCT.md: generic SaaS dashboard chrome, weather-app clichés, and the AI-slop hero-metric template. It rejects them through type-led hierarchy, single-purpose color, generous whitespace, and a steadfast refusal to decorate. Where most tools shout their data, the Reference Atlas catalogues it.
Key Characteristics
- Warm, cream-tinted canvas. Never
#fff. - Single-family typography (Geist) doing all jobs: display, body, label, data.
- Map is the hero on data surfaces; the ranked list and detail panel orbit it.
- Color is reserved for meaning. Brand, secondary, caution, precipitation, neutral. Nothing decorative.
- Flat by default. Shadows only as state response.
- Source disclosure (dataset, normal period, model run) is visible on every numbers-bearing surface.
Named Rules
10 rulesThe doctrinal one-liners that ClimateScope agents must internalize. Pulled verbatim from DESIGN.md. When a rule and a token disagree, the rule wins.
#fff or #000. Every neutral is tinted toward the brand hue (green, chroma 0.005–0.012). Pure white feels clinical and breaks the editorial register..label) are scoped: they appear above section titles to identify the section type, never inside body content. Three eyebrows per surface, maximum. They lose force when overused.oklch(...) / low-alpha). Pure-black rgba(0,0,0,...) shadows are forbidden. They feel borrowed from another system.Do's & Don'ts
DESIGN.md · §6Concrete guardrails. The Don'ts mirror PRODUCT.md anti-references so the strategic line carries into the visual spec.
- Use Cartographer's Forest only on primary actions, active states, and the selected-region outline. ≤10% of any screen.
- Tint every neutral toward green (chroma 0.005–0.012).
#fffand#000are prohibited. - Disclose dataset, normal period, and model run date on every numbers-bearing surface.
- Pair every data flag color with an explicit text label.
- Render the Japan map at ≥50% of the climate-comparison surface width.
- Keep shadows transient. Hover, focus, drag only. Resting surfaces are flat.
- Use 65–75ch line length for prose. Compact UI can run denser.
- Respect
prefers-reduced-motion. Disable region transitions, hover lifts, fade-ins.
- Build generic SaaS dashboard chrome. Sidebar + top bar + tabs + KPI cards is the AI-slop default.
- Use weather-app clichés. No gradient skies, no big sun/cloud icons, no emoji weather.
- Ship the AI-slop hero-metric template. Big colorful number + supporting stats + gradient accent.
- Default to dark mode or use neon/crypto/observability aesthetics.
- Use
border-leftorborder-rightgreater than 1px as a colored accent. - Use
background-clip: textfor gradient headlines. - Use glassmorphism as a default decorative move.
- Use modals as a first thought. Inline and progressive disclosure first.
- Use Anomaly Clay decoratively. Caution is its only job.
- Use em dashes. Use commas, colons, semicolons, periods, or parentheses.
- Introduce a second type family. Geist carries every job.
- Put resting shadows on cards. Tonal layering and Border Subtle do the work.
Overview
role-based · OKLCH
ClimateScope's palette is role-based, not scalar. Each color family has a specific job: Forest is brand, Sage is secondary, Earth is caution, Rain is precipitation, Slate is neutrals, Stone is surfaces. Tokens are authored in OKLCH for perceptual consistency; hex values shown for designer reference. Mock anchors pin specific roles to a hex from the design mockup at docs/design/inspiration/design and mock.png.
Color scales
primitivesEach row is one color family stepped from light to dark. Hover a chip to lift it.
Semantic roles
aliasesAlways prefer the semantic alias over the primitive when writing component CSS. These are the names components should reach for.
| Token | Role | Resolves to | |
|---|---|---|---|
| --cs-color-canvas | Page background | Stone 100 | |
| --cs-color-surface | Card / panel | Chalk | |
| --cs-color-surface-muted | Secondary panel | Surface Alt | |
| --cs-color-border | Default border | Border Subtle | |
| --cs-color-border-strong | Emphasis border | Slate 300 | |
| --cs-color-text | Primary text | Ink Strong | |
| --cs-color-text-muted | Secondary text, icons, labels | Slate 600 | |
| --cs-color-primary | Brand · primary action | Forest 500 | |
| --cs-color-primary-hover | Primary hover | Forest 600 | |
| --cs-color-secondary | Secondary · stable state | Sage 300 | |
| --cs-color-secondary-soft | Soft sage fill | Sage 100 | |
| --cs-color-threshold | Caution · above-normal anomaly | Earth 400 | |
| --cs-color-precipitation | Rain / below-normal precip | Rain 400 | |
| --cs-color-focus | Focus ring | Rain 400 |
Mock anchors
design-lockedTokens pinned to exact hex values from the design mockup. Diverging from these means diverging from the design.
| Token | Mock hex | Role |
|---|---|---|
--cs-forest-500 | #415C4A | Primary Forest Green |
--cs-forest-600 | #364D3E | Primary Hover · Darker Forest |
--cs-sage-300 | #B4C4A8 | Secondary Sage |
--cs-sage-400 | #A4B594 | Sage Deep · hover |
--cs-earth-400 | #C7A28F | Accent Clay · caution |
--cs-slate-600 | #53635A | Slate Text / Icons |
--cs-rain-400 | #6D8FA3 | Data Rain Blue · precip |
--cs-surface-alt | #EEF0EC | Surface Alt Panel |
--cs-border-subtle | #E1E6E2 | Border Subtle |
Typography
Geist + Geist MonoSpacing
4px baseBorder Radius
7 valuesElevation
3 levelsRestraint. Shadows appear only as a response to state (hover, lifted content). Most surfaces are flat by default.
Opacity
9 valuesFor state overlays, disabled treatments, and faint backdrops. Chip color is --cs-color-primary; you're seeing it through each opacity level.
Segmented control
metric switchData flags
status pillsFlags encode meaning through color. Clay = above-normal anomaly. Rain blue = below-normal precipitation. Sage = stable / good.
Usage guide
do · don't.button {
background: var(--cs-color-primary);
color: var(--cs-color-primary-contrast);
}
.button {
background: var(--cs-forest-500);
color: var(--cs-chalk);
}
.metric-above-normal {
color: var(--cs-color-threshold);
}
/* Clay is not a brand accent. */
.tag {
background: var(--cs-color-threshold);
}