sheleg-design-skill 1.64.0 → 1.64.2
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/CHANGELOG.md +26 -0
- package/README.md +6 -0
- package/cursor/rules/sheleg-design.mdc +4 -2
- package/kits/test-drive/src/styles.css +4 -4
- package/package.json +1 -1
- package/plugins/sheleg-design/.claude-plugin/plugin.json +1 -1
- package/plugins/sheleg-design/skills/sheleg-design/MOTION_DOCTRINE.md +9 -0
- package/plugins/sheleg-design/skills/sheleg-design/SKILL.md +1 -1
- package/plugins/sheleg-design/skills/sheleg-design/styles/almanac.md +25 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/cyclorama.md +1 -1
- package/plugins/sheleg-design/skills/sheleg-design/styles/daylight.md +25 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/notation.md +28 -3
- package/plugins/sheleg-design/skills/sheleg-design/styles/outrank.md +25 -3
- package/plugins/sheleg-design/skills/sheleg-design/styles/paperclip.md +4 -3
- package/plugins/sheleg-design/skills/sheleg-design/styles/pigeonhole.md +3 -4
- package/plugins/sheleg-design/skills/sheleg-design/styles/prism.md +5 -1
- package/plugins/sheleg-design/skills/sheleg-design/styles/proscenium.md +25 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/router.md +25 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/test-drive.md +20 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/test-drive.css +4 -4
- package/plugins/sheleg-design/skills/sheleg-design/styles/vitrine.md +25 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
## 1.64.2 — derived palette facts and explicit calm fallback
|
|
2
|
+
|
|
3
|
+
- Dark theme documentation now includes source-derived tables for almanac,
|
|
4
|
+
daylight, notation, outrank, proscenium, router, test-drive and vitrine. The
|
|
5
|
+
palette guard checks their values and required markers; four existing tables
|
|
6
|
+
retain a presence check. `scripts/sync-dark-palettes.py` refreshes marked tables.
|
|
7
|
+
- Colour-distance disclosures name one pair per sentence and an explicit
|
|
8
|
+
qualifier. Unbound disclosure figures now fail the palette gate.
|
|
9
|
+
- Reduced-motion guidance documents the existing keep-with-reason contract;
|
|
10
|
+
prism's point-cloud guidance names a static fallback and frame-loop shutdown.
|
|
11
|
+
- Validation runs nightly and on deliberate ready-for-review promotion, with
|
|
12
|
+
manual dispatch retained for diagnostics. No push/synchronize trigger.
|
|
13
|
+
- No CSS colour values or runtime installation changed; publication is a separate gate.
|
|
14
|
+
Evidence: [FW05 receipt](docs/evidence/runs/2026-10-13-fw05-design-facts.md).
|
|
15
|
+
|
|
16
|
+
## 1.64.1 — a lightweight tag cannot publish a release
|
|
17
|
+
|
|
18
|
+
- **The release refuses a lightweight tag.** `release.yml` gains one step, right after
|
|
19
|
+
checkout and before any gate: `git cat-file -t` on the tag must print `tag`; a `commit`
|
|
20
|
+
fails the job with the remedy (`git tag -a <tag> -m '<release>'` at the same commit)
|
|
21
|
+
before anything is published. `git describe` and `git submodule status` see annotated
|
|
22
|
+
tags only, and the 2026-10-09 family wave cut four lightweight member tags that the
|
|
23
|
+
umbrella then read as each member's previous release. The step is identical across the
|
|
24
|
+
family (umbrella plan 2026-10-10, T5 / REQ-6). Published tags are not re-cut.
|
|
25
|
+
- No skill, reference or installer change.
|
|
26
|
+
|
|
1
27
|
## 1.64.0 — a published variable names its token, the family has one tier model, and a redesign starts from a capture
|
|
2
28
|
|
|
3
29
|
A 2026-10-08 read of Figma's own guidance — *Claude Code for designers*, the MCP
|
package/README.md
CHANGED
|
@@ -336,6 +336,12 @@ These run **in a clone of this repository**. The published npm package ships no
|
|
|
336
336
|
python3 test/validate.py # or: npm test
|
|
337
337
|
```
|
|
338
338
|
|
|
339
|
+
Marked dark-palette tables resolve their values from the shipped CSS graph.
|
|
340
|
+
`python3 scripts/sync-dark-palettes.py --check` reports drift; `--write` refreshes
|
|
341
|
+
the marked canonical tables and their Cursor mirror. The palette gate also
|
|
342
|
+
requires every full theme twin to have a populated dark table and refuses
|
|
343
|
+
unbound multi-pair disclosure figures. These are source checks, not render tests.
|
|
344
|
+
|
|
339
345
|
`npm test` is **several gates**, not one, and `validate.py` alone is about a
|
|
340
346
|
third of the contract:
|
|
341
347
|
|
|
@@ -183,8 +183,10 @@ Frequency decides before taste gets a vote. (Full doctrine:
|
|
|
183
183
|
- **Reduced motion is a contract, not a feature.** Anything beyond a colour
|
|
184
184
|
change honours `prefers-reduced-motion: reduce`; loops, parallax and springs
|
|
185
185
|
collapse to static or instant, never to "slower"; an opacity or colour change that
|
|
186
|
-
carries state may stay.
|
|
187
|
-
|
|
186
|
+
carries state may stay. Every time-valued token appears in that branch: collapse it
|
|
187
|
+
or re-declare it with a `KEPT` / `ON PURPOSE` / `deliberate` CSS reason and verify
|
|
188
|
+
the consumer stops (atrium removes its canvas; roster pauses its float animations).
|
|
189
|
+
Shipping an animation without that branch is a bug, not a polish item.
|
|
188
190
|
- This section is adapted from `emilkowalski/skills` (MIT License, Copyright (c) 2026
|
|
189
191
|
Emil Kowalski); the full notice ships in the skill's `KNOWLEDGE_PROVENANCE.md` and
|
|
190
192
|
at https://github.com/emilkowalski/skills/blob/e8a175de22ae1e49370fc144c1f3bb9aeedf988d/LICENSE.
|
|
@@ -354,10 +354,10 @@
|
|
|
354
354
|
--focus-color: var(--accent); /* 4.82:1 on --bg — over the mark floor */
|
|
355
355
|
|
|
356
356
|
/* DERIVED the way the light set was: each hue held, lightness raised until it
|
|
357
|
-
writes on both dark fields. The tight pairs move with the physics
|
|
358
|
-
--warn sit 7.2 apart under protanopia, --good and --danger
|
|
359
|
-
deuteranopia, --good and --info 4.0 under tritanopia
|
|
360
|
-
|
|
357
|
+
writes on both dark fields. The tight pairs move with the physics. In dark, --good and
|
|
358
|
+
--warn sit 7.2 apart under protanopia. In dark, --good and --danger sit
|
|
359
|
+
3.8 under deuteranopia. In dark, --good and --info sit 4.0 under tritanopia.
|
|
360
|
+
A state is told apart by the word beside it, not by hue. */
|
|
361
361
|
--good: #3ddc97; /* 9.33:1 on --bg, 8.56:1 on --surface */
|
|
362
362
|
--warn: #ffd05c; /* 11.33:1 on --bg, 10.40:1 on --surface */
|
|
363
363
|
--danger: #ff8095; /* 6.89:1 on --bg, 6.32:1 on --surface */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sheleg-design-skill",
|
|
3
|
-
"version": "1.64.
|
|
3
|
+
"version": "1.64.2",
|
|
4
4
|
"description": "Design taste as an installable agent skill. Cinematic scroll-driven landing pages built on one scroll clock and layered degrade-to-calm motion, a motion doctrine that decides whether to animate before it decides how, three calibration dials, and thirty-nine locked style packs with ready-made design tokens \u2014 instrument-console, editorial-luxury, workbench, briefing-room, atrium, orchard, outrank, babylove, patchbay, nameplate, field-notes, cyclorama, showroom, blueprint, prism, maquette, scoreboard, datasheet, manpage, pigeonhole, roster, ora, tenor, paperclip, ledger, router, daylight, notation, almanac, vitrine, proscenium, awning, bulletin, rimlight, onionskin, deskmate, test-drive, surveyor and chorus. Colour, slop and fork-reciprocity gates run as scripts, not opinions. Works with Cursor, Claude Code and any agent that reads a SKILL.md.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sheleg-design-skill": "bin/cli.js"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "sheleg-design",
|
|
4
4
|
"displayName": "SHELEG Design",
|
|
5
5
|
"description": "SHELEG Design methodology: cinematic scroll-driven landing pages (single scroll clock, layered degrade-to-calm motion, WebGL particle formations), a motion doctrine that decides whether to animate before it decides how, and thirty-nine pluggable visual style packs, each with a ready-made token layer — instrument-console (near-black aerospace console; technical systems and infrastructure), editorial-luxury (cream and espresso; editorial, research, premium B2B), workbench (quiet light/dark UI; dashboards, admin, internal tools), briefing-room (dark 16:9 deck; investor and board presentations), atrium (cream daylight; consumer health and high-trust DTC), babylove (white with orange; SEO SaaS, long time-to-value, disconnected states), patchbay (black with mint-cyan; engines, buses, pipelines, OSS front doors), nameplate (cool slab with coral; press, certification and third-party trust), rimlight (white with blue light; studios, services and case studies), onionskin (white working sheet; developer and AI infrastructure), deskmate (warm beige with a dusk bleed; AI coworkers and chat-native agents), test-drive (warm paper with one coral; self-serve SaaS proven by the live product), surveyor (peach paper with teal and pink; visibility, monitoring and benchmark tools), chorus (warm paper under a crosshair grid, with a cut-corner bubble; AI-search visibility, brand monitoring and community marketing), outrank (white with violet; one brand across marketing and product), orchard (warm oat slabs; friendly biotech and wellness), field-notes (ruled green paper; auditable open-source developer tools), showroom (white gallery; product-led companies selling the app), blueprint (white technical stock; vector, storage and query infrastructure), prism (iridescent hard edge; command-first OSS infrastructure), maquette (near-black table; enterprise data infrastructure), cyclorama (looping pastel field; applied-AI consultancies), scoreboard (warm paper; growth, ads and accumulating metrics), datasheet (off-white specification; fraud, identity and device intelligence), manpage (cream manual; APIs, SDKs, CLIs and MCP servers), pigeonhole (filed white field; inbox, ticket and CRM triage), roster (faint square grid; platforms sold through who uses them), ora (warm coal; machine verdicts, audits and protocol traces), tenor (warm management paper; agent operations and autonomous back office), ledger (cream ruled console; analysts, BI and warehouse agents), paperclip (monochrome coal; orchestrators, schedulers and job runners), awning (white commerce forecourt; storefront, payroll and billing platforms), router (pale console with hairlines; dashboard, billing and inventory surfaces), daylight (bright portal with one shadow; client onboarding and service portals), notation (restrained technical hairlines; OSS, docs and developer workspaces), almanac (oatmeal editorial paper; manifestos and category-defining pages), vitrine (serif trust display; evaluated B2B, security and compliance), proscenium (white demo sequence; product tours and launch pages), bulletin (cheerful outlined bands; broad SMB and agency platforms). Ships the sheleg-design skill, the architecture reference, the motion doctrine, the Figma and Claude Design bridges, AI-surface patterns, the packs' token CSS, and the /sheleg-design command.",
|
|
6
|
-
"version": "1.64.
|
|
6
|
+
"version": "1.64.2",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "ssheleg",
|
|
9
9
|
"url": "https://x.com/sshlg93"
|
|
@@ -323,6 +323,15 @@ Not a feature. A contract.
|
|
|
323
323
|
state. In CSS, put motion behind `@media (prefers-reduced-motion: no-preference)`.
|
|
324
324
|
- WebGL and canvas scenes degrade to their CSS or SVG still.
|
|
325
325
|
|
|
326
|
+
**Every time-valued token answers the reduced-motion branch.** Collapse it, or
|
|
327
|
+
re-declare its existing value in that branch with a CSS comment marked `KEPT`,
|
|
328
|
+
`ON PURPOSE` or `deliberate` that names why it cannot move anything there.
|
|
329
|
+
`atrium` keeps its flute durations because the canvas is removed and its still
|
|
330
|
+
is displayed; `roster` keeps the float durations while the component layer sets
|
|
331
|
+
`animation-play-state: paused`. Neither permits a slower moving alternative.
|
|
332
|
+
Verify the promised removal or pause at the consuming component; a duration
|
|
333
|
+
comment alone cannot stop a loop. State-carrying fades follow the exception above.
|
|
334
|
+
|
|
326
335
|
**Shipping an animation without a reduced-motion path is a bug, not a polish
|
|
327
336
|
item.** It fails review the same way a crash does.
|
|
328
337
|
|
|
@@ -4,7 +4,7 @@ description: Use when deciding how something LOOKS or MOVES — landing/hero pag
|
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Kit/lane commands need node>=16, npx, network. Optional siblings — dataviz, shadcn, migrate-radix-to-base. Each has an in-text fallback when absent or unreachable.
|
|
6
6
|
metadata:
|
|
7
|
-
version: 1.64.
|
|
7
|
+
version: 1.64.2
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# SHELEG Design
|
|
@@ -94,6 +94,31 @@ measured **6.4 apart at full colour** against the palette gate's hard floor of
|
|
|
94
94
|
It is moved along the hue until it separates, and the token layer marks it
|
|
95
95
|
derived at the declaration.
|
|
96
96
|
|
|
97
|
+
### Dark theme — values from the token layer
|
|
98
|
+
|
|
99
|
+
This table resolves the dark theme's core colour roles from the shipped token
|
|
100
|
+
layer, including aliases and inherited values. It is checked against that source;
|
|
101
|
+
copy the CSS rather than transcribing this table. It is a source-value check,
|
|
102
|
+
not a rendered contrast or accessibility result.
|
|
103
|
+
|
|
104
|
+
<!-- dark-palette:derived -->
|
|
105
|
+
| Token | Dark value |
|
|
106
|
+
|---|---|
|
|
107
|
+
| `--bg` | `#15140f` |
|
|
108
|
+
| `--panel` | `#1e1c15` |
|
|
109
|
+
| `--panel-2` | `#26241b` |
|
|
110
|
+
| `--ink` | `#f0efe3` |
|
|
111
|
+
| `--muted` | `#b3b0a2` |
|
|
112
|
+
| `--border` | `#3c3a31` |
|
|
113
|
+
| `--edge` | `#6f6d64` |
|
|
114
|
+
| `--accent` | `#3392ff` |
|
|
115
|
+
| `--accent-ink` | `#15140f` |
|
|
116
|
+
| `--ok` | `#46d39a` |
|
|
117
|
+
| `--warn` | `#fa6838` |
|
|
118
|
+
| `--danger` | `#ff6f9a` |
|
|
119
|
+
| `--info` | `#3392ff` |
|
|
120
|
+
<!-- /dark-palette:derived -->
|
|
121
|
+
|
|
97
122
|
## Type
|
|
98
123
|
|
|
99
124
|
Two families, and one of them only ever shouts in capitals.
|
|
@@ -143,7 +143,7 @@ Three rules carry this palette.
|
|
|
143
143
|
orange in this palette.
|
|
144
144
|
- **Status is never by colour alone.** `--good` and `--danger` separate by 14.0
|
|
145
145
|
at full colour but **7.2 under protanopia and 5.9 under deuteranopia**;
|
|
146
|
-
`--warning` and `--danger` by 14.8. Every status renders as a mark **plus its
|
|
146
|
+
`--warning` and `--danger` separate by 14.8 at full colour. Every status renders as a mark **plus its
|
|
147
147
|
word** — which is a measurement of the reference, not a licence: its status
|
|
148
148
|
pill reads `● Listening`, and every comparison row pairs its dot with a text
|
|
149
149
|
phrase. A dot alone is a bug in this pack.
|
|
@@ -85,6 +85,31 @@ red was authored to clear AA on the field, the panel and its own tint (6.09 /
|
|
|
85
85
|
less than the palette gate's hard floor, and "running" is this product's own
|
|
86
86
|
signal rather than a new colour.
|
|
87
87
|
|
|
88
|
+
### Dark theme — values from the token layer
|
|
89
|
+
|
|
90
|
+
This table resolves the dark theme's core colour roles from the shipped token
|
|
91
|
+
layer, including aliases and inherited values. It is checked against that source;
|
|
92
|
+
copy the CSS rather than transcribing this table. It is a source-value check,
|
|
93
|
+
not a rendered contrast or accessibility result.
|
|
94
|
+
|
|
95
|
+
<!-- dark-palette:derived -->
|
|
96
|
+
| Token | Dark value |
|
|
97
|
+
|---|---|
|
|
98
|
+
| `--bg` | `#0b0f14` |
|
|
99
|
+
| `--panel` | `#161b23` |
|
|
100
|
+
| `--panel-2` | `#1b2430` |
|
|
101
|
+
| `--ink` | `#eef2f7` |
|
|
102
|
+
| `--muted` | `#a3adbb` |
|
|
103
|
+
| `--border` | `#1c2531` |
|
|
104
|
+
| `--edge` | `#5b6675` |
|
|
105
|
+
| `--accent` | `#3392ff` |
|
|
106
|
+
| `--accent-ink` | `#0e1218` |
|
|
107
|
+
| `--ok` | `#46d39a` |
|
|
108
|
+
| `--warn` | `#e0a030` |
|
|
109
|
+
| `--danger` | `#ff7b72` |
|
|
110
|
+
| `--info` | `#3392ff` |
|
|
111
|
+
<!-- /dark-palette:derived -->
|
|
112
|
+
|
|
88
113
|
## Type
|
|
89
114
|
|
|
90
115
|
Two families, and the split is the pack.
|
|
@@ -71,9 +71,9 @@ is to mark what can be **pressed**. Swapping them is the single change that
|
|
|
71
71
|
stops this pack working.
|
|
72
72
|
|
|
73
73
|
**Status is never by colour alone.** Every state is a dot or an icon **plus a
|
|
74
|
-
word**.
|
|
75
|
-
and `--warn` by 7.9
|
|
76
|
-
|
|
74
|
+
word**. In light, `--danger` and `--warn` separate by 1.6 under deuteranopia.
|
|
75
|
+
In dark, `--ok` and `--warn` separate by 7.9 under deuteranopia. The word carries
|
|
76
|
+
the meaning when hue cannot separate these states.
|
|
77
77
|
|
|
78
78
|
**`--danger` is derived, not measured**, and the token layer says so at the
|
|
79
79
|
declaration: the reference paints no error state, so a red was authored to clear
|
|
@@ -82,6 +82,31 @@ AA on the field, the panel and its own tint (6.54 / 6.26 / 5.50).
|
|
|
82
82
|
**`--info` is the accent value**, because a second blue would separate from
|
|
83
83
|
`--ok` by less than the palette gate's hard floor.
|
|
84
84
|
|
|
85
|
+
### Dark theme — values from the token layer
|
|
86
|
+
|
|
87
|
+
This table resolves the dark theme's core colour roles from the shipped token
|
|
88
|
+
layer, including aliases and inherited values. It is checked against that source;
|
|
89
|
+
copy the CSS rather than transcribing this table. It is a source-value check,
|
|
90
|
+
not a rendered contrast or accessibility result.
|
|
91
|
+
|
|
92
|
+
<!-- dark-palette:derived -->
|
|
93
|
+
| Token | Dark value |
|
|
94
|
+
|---|---|
|
|
95
|
+
| `--bg` | `#141414` |
|
|
96
|
+
| `--panel` | `#1c1c1c` |
|
|
97
|
+
| `--panel-2` | `#242424` |
|
|
98
|
+
| `--ink` | `#f2f2f2` |
|
|
99
|
+
| `--muted` | `#a0a0a0` |
|
|
100
|
+
| `--border` | `#2b2b2b` |
|
|
101
|
+
| `--edge` | `#686868` |
|
|
102
|
+
| `--accent` | `#3392ff` |
|
|
103
|
+
| `--accent-ink` | `#141414` |
|
|
104
|
+
| `--ok` | `#46d39a` |
|
|
105
|
+
| `--warn` | `#e0a030` |
|
|
106
|
+
| `--danger` | `#ff7b72` |
|
|
107
|
+
| `--info` | `#3392ff` |
|
|
108
|
+
<!-- /dark-palette:derived -->
|
|
109
|
+
|
|
85
110
|
## Type
|
|
86
111
|
|
|
87
112
|
Three families, and each has exactly one job.
|
|
@@ -76,6 +76,28 @@ Motion ceiling: **2**. Measured, not chosen — the entire site's motion budget
|
|
|
76
76
|
4.5 on both fields. The reference's warning `#FF642D` measures **2.95:1**, under
|
|
77
77
|
even the non-text floor; `#E5511B` is the smallest darkening that clears it.
|
|
78
78
|
|
|
79
|
+
### Dark theme — values from the token layer
|
|
80
|
+
|
|
81
|
+
This table resolves the dark theme's core colour roles from the shipped token
|
|
82
|
+
layer, including aliases and inherited values. It is checked against that source;
|
|
83
|
+
copy the CSS rather than transcribing this table. It is a source-value check,
|
|
84
|
+
not a rendered contrast or accessibility result.
|
|
85
|
+
|
|
86
|
+
<!-- dark-palette:derived -->
|
|
87
|
+
| Token | Dark value |
|
|
88
|
+
|---|---|
|
|
89
|
+
| `--bg` | `#191b23` |
|
|
90
|
+
| `--surface` | `#1d232a` |
|
|
91
|
+
| `--ink` | `#ffffff` |
|
|
92
|
+
| `--ink-soft` | `#a6adba` |
|
|
93
|
+
| `--accent` | `#ab6cfe` |
|
|
94
|
+
| `--on-accent` | `#220358` |
|
|
95
|
+
| `--success` | `#009f81` |
|
|
96
|
+
| `--warning` | `#c2740a` |
|
|
97
|
+
| `--danger` | `#ff4953` |
|
|
98
|
+
| `--info` | `#008ff8` |
|
|
99
|
+
<!-- /dark-palette:derived -->
|
|
100
|
+
|
|
79
101
|
## Type
|
|
80
102
|
|
|
81
103
|
Two families, and the split is the whole typographic idea: **Plus Jakarta Sans**
|
|
@@ -200,9 +222,9 @@ sits above every metric on the page.
|
|
|
200
222
|
- **Status is never by colour alone.** Every state in this pack carries a word or
|
|
201
223
|
an icon beside the hue — which is what the reference does: its category chips
|
|
202
224
|
are iconned, its wins feed is checked, its at-risk rows are flagged. Measured
|
|
203
|
-
under simulated CVD, `--info` and `--success` separate by
|
|
204
|
-
tritanopia
|
|
205
|
-
the second signal here and never the first.
|
|
225
|
+
under simulated CVD, `--info` and `--success` separate by 6.9 under
|
|
226
|
+
tritanopia in both themes. In dark, `--accent` and `--info` separate by
|
|
227
|
+
2.9 under deuteranopia. Hue is the second signal here and never the first.
|
|
206
228
|
- **No second brand hue.** One violet. The status four are states, not brand.
|
|
207
229
|
- **No skeleton, no spinner** on a surface that has a previous value — stamp it.
|
|
208
230
|
- **No serif, anywhere.** Two sans families and no third.
|
|
@@ -170,9 +170,10 @@ the 3:1 non-text floor, so there they are bar fills, dots and chip tints and the
|
|
|
170
170
|
status pill is a coloured chip **with the state written in it** (`In Progress`),
|
|
171
171
|
its trace lines are `passed` / `done` / `running` in words, and its org node
|
|
172
172
|
announces itself with an `Active` chip rather than a green ring alone. The
|
|
173
|
-
measured separations
|
|
174
|
-
|
|
175
|
-
|
|
173
|
+
measured separations make this mandatory: `--good` and `--warn` separate by
|
|
174
|
+
6.2 under protanopia in dark and 6.4 under protanopia in light. In dark,
|
|
175
|
+
`--good` and `--info` separate by 6.7 under tritanopia. These measurements are
|
|
176
|
+
below the 8.0 dichromacy floor. The word is not
|
|
176
177
|
decoration on those pairs; it is the message.
|
|
177
178
|
|
|
178
179
|
**The chromatic layer is ornament, and the rule is one sentence.** Twelve badge
|
|
@@ -150,10 +150,9 @@ The thirty-six tint tokens are not listed here: a table of them would be a
|
|
|
150
150
|
transcription, and `styles/tokens/pigeonhole.css` is the copy to take. What the
|
|
151
151
|
table above is for is the functional half — the tokens a component names by hand.
|
|
152
152
|
|
|
153
|
-
**Status is never by colour alone.** The
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
or a position as well as a hue. That is not a mitigation bolted on afterwards; it
|
|
153
|
+
**Status is never by colour alone.** The gate measures `--danger` and `--good`
|
|
154
|
+
at 3.4 under deuteranopia. It measures `--good` and `--warn` at 5.0 under
|
|
155
|
+
deuteranopia. Every status carries a word, an icon or a position as well as a hue. That is not a mitigation bolted on afterwards; it
|
|
157
156
|
is the same rule the taxonomy below is built on.
|
|
158
157
|
|
|
159
158
|
### The taxonomy — the reason this pack exists
|
|
@@ -269,7 +269,11 @@ at `--dur-base` on the one curve, translate 10px and opacity.
|
|
|
269
269
|
The ambient layer, if there is one, is a **point cloud in the accent** at low
|
|
270
270
|
opacity inside the hero only — points, not particles, and they must die at the
|
|
271
271
|
wash's bottom edge along with everything else. Nothing generative appears on the
|
|
272
|
-
white.
|
|
272
|
+
white. Under `prefers-reduced-motion: reduce`, coarse pointer or no WebGL,
|
|
273
|
+
render a fixed CSS or SVG point pattern clipped to the same hero boundary; never
|
|
274
|
+
start the point cloud's requestAnimationFrame loop. On a preference change, cancel
|
|
275
|
+
the scheduled frame and show that still. The static wash, text and controls remain
|
|
276
|
+
visible, and no point moves or waits for a scroll event to appear.
|
|
273
277
|
|
|
274
278
|
The wash is layer 1 in the depth model and it is `pointer-events: none`. It is
|
|
275
279
|
never put on a scroller, never parallaxed, and never faded — it ends where the
|
|
@@ -112,6 +112,31 @@ blue.
|
|
|
112
112
|
laid behind the field at low opacity. They never carry state, never sit under
|
|
113
113
|
text that has to be read, and never appear in a chart.
|
|
114
114
|
|
|
115
|
+
### Dark theme — values from the token layer
|
|
116
|
+
|
|
117
|
+
This table resolves the dark theme's core colour roles from the shipped token
|
|
118
|
+
layer, including aliases and inherited values. It is checked against that source;
|
|
119
|
+
copy the CSS rather than transcribing this table. It is a source-value check,
|
|
120
|
+
not a rendered contrast or accessibility result.
|
|
121
|
+
|
|
122
|
+
<!-- dark-palette:derived -->
|
|
123
|
+
| Token | Dark value |
|
|
124
|
+
|---|---|
|
|
125
|
+
| `--bg` | `#07061d` |
|
|
126
|
+
| `--panel` | `#18143a` |
|
|
127
|
+
| `--panel-2` | `#0c0a26` |
|
|
128
|
+
| `--ink` | `#f7f6ff` |
|
|
129
|
+
| `--muted` | `#a9a6c8` |
|
|
130
|
+
| `--border` | `#262159` |
|
|
131
|
+
| `--edge` | `#6f6aa0` |
|
|
132
|
+
| `--accent` | `#8f7dff` |
|
|
133
|
+
| `--accent-ink` | `#07061d` |
|
|
134
|
+
| `--ok` | `#4fd39b` |
|
|
135
|
+
| `--warn` | `#e0a63c` |
|
|
136
|
+
| `--danger` | `#ff8177` |
|
|
137
|
+
| `--info` | `#8f7dff` |
|
|
138
|
+
<!-- /dark-palette:derived -->
|
|
139
|
+
|
|
115
140
|
## Type
|
|
116
141
|
|
|
117
142
|
**One family, and that is the pack.** The reference loads Inter at nine weights
|
|
@@ -125,6 +125,31 @@ instead, to `#4d8dff` at 5.73.
|
|
|
125
125
|
and a danger chip is exactly where the word most needs to be read. Lifted until
|
|
126
126
|
it clears the tint it sits on: 5.13.
|
|
127
127
|
|
|
128
|
+
### Dark theme — values from the token layer
|
|
129
|
+
|
|
130
|
+
This table resolves the dark theme's core colour roles from the shipped token
|
|
131
|
+
layer, including aliases and inherited values. It is checked against that source;
|
|
132
|
+
copy the CSS rather than transcribing this table. It is a source-value check,
|
|
133
|
+
not a rendered contrast or accessibility result.
|
|
134
|
+
|
|
135
|
+
<!-- dark-palette:derived -->
|
|
136
|
+
| Token | Dark value |
|
|
137
|
+
|---|---|
|
|
138
|
+
| `--bg` | `#10151d` |
|
|
139
|
+
| `--panel` | `#181d25` |
|
|
140
|
+
| `--panel-2` | `#20252c` |
|
|
141
|
+
| `--ink` | `#f5f7f9` |
|
|
142
|
+
| `--muted` | `#a0a3a7` |
|
|
143
|
+
| `--border` | `#20242c` |
|
|
144
|
+
| `--edge` | `#606369` |
|
|
145
|
+
| `--accent` | `#4d8dff` |
|
|
146
|
+
| `--accent-ink` | `#10151d` |
|
|
147
|
+
| `--ok` | `#34dfaa` |
|
|
148
|
+
| `--warn` | `#e5a000` |
|
|
149
|
+
| `--danger` | `#ff5470` |
|
|
150
|
+
| `--info` | `#4d8dff` |
|
|
151
|
+
<!-- /dark-palette:derived -->
|
|
152
|
+
|
|
128
153
|
## Type
|
|
129
154
|
|
|
130
155
|
Two families and no third.
|
|
@@ -158,6 +158,26 @@ under colour-vision deficiency are stated at the declaration, and every state ca
|
|
|
158
158
|
a word or a glyph beside its colour — the reference's own dashboard writes the
|
|
159
159
|
percentage next to every delta arrow.
|
|
160
160
|
|
|
161
|
+
### Dark theme — values from the token layer
|
|
162
|
+
|
|
163
|
+
This table resolves the dark theme's core colour roles from the shipped token
|
|
164
|
+
layer, including aliases and inherited values. It is checked against that source;
|
|
165
|
+
copy the CSS rather than transcribing this table. It is a source-value check,
|
|
166
|
+
not a rendered contrast or accessibility result.
|
|
167
|
+
|
|
168
|
+
<!-- dark-palette:derived -->
|
|
169
|
+
| Token | Dark value |
|
|
170
|
+
|---|---|
|
|
171
|
+
| `--bg` | `#1f1f1f` |
|
|
172
|
+
| `--surface` | `#262626` |
|
|
173
|
+
| `--ink` | `#dedddc` |
|
|
174
|
+
| `--accent` | `#e16540` |
|
|
175
|
+
| `--good` | `#3ddc97` |
|
|
176
|
+
| `--warn` | `#ffd05c` |
|
|
177
|
+
| `--danger` | `#ff8095` |
|
|
178
|
+
| `--info` | `#63c1ff` |
|
|
179
|
+
<!-- /dark-palette:derived -->
|
|
180
|
+
|
|
161
181
|
## Type
|
|
162
182
|
|
|
163
183
|
One working face and one hand — the second is the voice, not a display face.
|
|
@@ -354,10 +354,10 @@
|
|
|
354
354
|
--focus-color: var(--accent); /* 4.82:1 on --bg — over the mark floor */
|
|
355
355
|
|
|
356
356
|
/* DERIVED the way the light set was: each hue held, lightness raised until it
|
|
357
|
-
writes on both dark fields. The tight pairs move with the physics
|
|
358
|
-
--warn sit 7.2 apart under protanopia, --good and --danger
|
|
359
|
-
deuteranopia, --good and --info 4.0 under tritanopia
|
|
360
|
-
|
|
357
|
+
writes on both dark fields. The tight pairs move with the physics. In dark, --good and
|
|
358
|
+
--warn sit 7.2 apart under protanopia. In dark, --good and --danger sit
|
|
359
|
+
3.8 under deuteranopia. In dark, --good and --info sit 4.0 under tritanopia.
|
|
360
|
+
A state is told apart by the word beside it, not by hue. */
|
|
361
361
|
--good: #3ddc97; /* 9.33:1 on --bg, 8.56:1 on --surface */
|
|
362
362
|
--warn: #ffd05c; /* 11.33:1 on --bg, 10.40:1 on --surface */
|
|
363
363
|
--danger: #ff8095; /* 6.89:1 on --bg, 6.32:1 on --surface */
|
|
@@ -80,6 +80,31 @@ carries the meaning and the colour reinforces it.
|
|
|
80
80
|
one pack of the five ported from live references whose reference paints an error
|
|
81
81
|
state, so nothing in its semantic set is derived.
|
|
82
82
|
|
|
83
|
+
### Dark theme — values from the token layer
|
|
84
|
+
|
|
85
|
+
This table resolves the dark theme's core colour roles from the shipped token
|
|
86
|
+
layer, including aliases and inherited values. It is checked against that source;
|
|
87
|
+
copy the CSS rather than transcribing this table. It is a source-value check,
|
|
88
|
+
not a rendered contrast or accessibility result.
|
|
89
|
+
|
|
90
|
+
<!-- dark-palette:derived -->
|
|
91
|
+
| Token | Dark value |
|
|
92
|
+
|---|---|
|
|
93
|
+
| `--bg` | `#101112` |
|
|
94
|
+
| `--panel` | `#17191b` |
|
|
95
|
+
| `--panel-2` | `#17191b` |
|
|
96
|
+
| `--ink` | `#f7f8f9` |
|
|
97
|
+
| `--muted` | `#b8c0cb` |
|
|
98
|
+
| `--border` | `#26292d` |
|
|
99
|
+
| `--edge` | `#60656d` |
|
|
100
|
+
| `--accent` | `#3392ff` |
|
|
101
|
+
| `--accent-ink` | `#101112` |
|
|
102
|
+
| `--ok` | `#3fcf7f` |
|
|
103
|
+
| `--warn` | `#ffb020` |
|
|
104
|
+
| `--danger` | `#ff7b72` |
|
|
105
|
+
| `--info` | `#3392ff` |
|
|
106
|
+
<!-- /dark-palette:derived -->
|
|
107
|
+
|
|
83
108
|
## Type
|
|
84
109
|
|
|
85
110
|
Three families, each with one job.
|