sheleg-design-skill 1.21.0 → 1.22.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/CHANGELOG.md +52 -0
- package/kits/showroom/src/styles.css +11 -0
- package/package.json +1 -1
- package/plugins/sheleg-design/.claude-plugin/plugin.json +1 -1
- package/plugins/sheleg-design/skills/sheleg-design/SKILL.md +1 -1
- package/plugins/sheleg-design/skills/sheleg-design/styles/STYLE_PACK_TEMPLATE.md +30 -3
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/showroom.css +11 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,58 @@ All notable changes to this project are documented in this file. The format
|
|
|
4
4
|
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions
|
|
5
5
|
follow [SemVer](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [1.22.0] - 2026-08-13
|
|
8
|
+
|
|
9
|
+
The palette gate learns two colour forms it had been refusing, and the refusal turns
|
|
10
|
+
out to have been the reason eight token layers restate a token's channels by hand.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`color-mix()` and relative colour are computable, so they are no longer banned.**
|
|
15
|
+
The gate parses `color-mix(in srgb | srgb-linear | oklab | oklch, A p%, B q%)` —
|
|
16
|
+
premultiplied, shorter hue arc — and `rgb(from <colour> r g b / a)`, with `var()`
|
|
17
|
+
now resolved **inside** a value rather than only as a whole value. Verified against
|
|
18
|
+
Chrome 151's own computed values across eleven cases at a **worst ΔE of 0.004**,
|
|
19
|
+
which is the browser's six-digit serialisation rather than a disagreement.
|
|
20
|
+
- **Four self-test plants, two of which prove the new paths are checked rather than
|
|
21
|
+
tolerated.** A `color-mix()` and a relative colour whose ink misses AA must fail on
|
|
22
|
+
the *ratio* — only possible if the parser really computed them. The other two prove
|
|
23
|
+
the refusals still refuse: an unimplemented mix space, and a `calc()` inside a
|
|
24
|
+
channel. Half-implemented CSS maths is worse than an honest refusal.
|
|
25
|
+
- **Rule 5 in the pack skeleton** replaces the ban with the limits and one migration
|
|
26
|
+
rule: relative colour is Baseline 2024, so where a token feeds an
|
|
27
|
+
accessibility-critical property — a focus ring above all — the literal ships first
|
|
28
|
+
and the derived value second, because a dropped declaration on a focus ring is an
|
|
29
|
+
invisible focus indicator.
|
|
30
|
+
- **`docs/audit/2026-08-13-modern-css-audit.md`** — the whole measurement: what the
|
|
31
|
+
library is ahead on (OKLab dichromacy checks, `color-scheme` in 16/16,
|
|
32
|
+
`text-wrap: balance` in 13/16 kits, `tabular-nums` in 10/16), what is a deliberate
|
|
33
|
+
position rather than a gap, and ten findings with counts.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- **`showroom`'s focus ring now tracks its accent.** `rgba(38, 109, 240, 0.35)` was
|
|
38
|
+
the accent's channels written out by hand; it is now
|
|
39
|
+
`rgb(from var(--accent) r g b / 0.35)`, measured **ΔE 0.00** from the literal, with
|
|
40
|
+
the literal kept as the preceding declaration. Re-tinting `--accent` used to leave
|
|
41
|
+
the ring on the old blue silently — the live mechanism behind B-023/B-024.
|
|
42
|
+
- **A blind spot closed in the same commit that opened its cause.** `themes()` decided
|
|
43
|
+
whether a block was a theme by testing for a `#` or an `oklch(` prefix, so a dark
|
|
44
|
+
theme written in `color-mix()` would have been read as "overrides no colour" and
|
|
45
|
+
skipped entirely. It asks `COLOR_SHAPED` now.
|
|
46
|
+
|
|
47
|
+
### Notes
|
|
48
|
+
|
|
49
|
+
- **The migration itself is not in this release.** 42 declarations across eight token
|
|
50
|
+
layers are ΔE 0.00 from a token in their own file and could migrate with no visible
|
|
51
|
+
change; 13 more sit within ΔE 2 without equalling one, and *near is not drift* — a
|
|
52
|
+
white at 80% beside an off-white field may be deliberately white. The first set is
|
|
53
|
+
B-027 and needs a per-property support decision; the second is B-028 and needs its
|
|
54
|
+
author, not a script.
|
|
55
|
+
- Also filed: B-029 (container queries in the kits — 0 of 16, against 7 viewport
|
|
56
|
+
blocks), B-030 (`text-box-trim`, measure in `ch`, metric-matched fallbacks,
|
|
57
|
+
`@property`, fluid spacing), B-031 (a DTCG export for the Figma seam).
|
|
58
|
+
|
|
7
59
|
## [1.21.0] - 2026-08-12
|
|
8
60
|
|
|
9
61
|
A sixteenth style pack, whose eleven pastel hues are a filing scheme rather than a
|
|
@@ -73,7 +73,18 @@
|
|
|
73
73
|
0 8px 16px -4px rgba(28, 29, 31, 0.04),
|
|
74
74
|
0 16px 32px -8px rgba(28, 29, 31, 0.05),
|
|
75
75
|
0 32px 64px -8px rgba(28, 29, 31, 0.06);
|
|
76
|
+
/* The ring is the accent at 35%, and it now says so instead of restating the
|
|
77
|
+
accent's channels by hand. Measured equal: rgba(38, 109, 240, 0.35) and
|
|
78
|
+
`rgb(from var(--accent) r g b / .35)` are ΔE 0.00 apart, so nothing a reader
|
|
79
|
+
sees changes — what changes is that re-tinting --accent now re-tints the ring,
|
|
80
|
+
where before it kept the old blue silently (board B-023/B-024).
|
|
81
|
+
The literal stays as the first declaration on purpose: relative colour is
|
|
82
|
+
Baseline 2024, and a browser that does not parse the second line keeps the
|
|
83
|
+
first. For an ordinary colour that would be belt-and-braces; for a FOCUS RING
|
|
84
|
+
a dropped declaration is an invisible focus indicator, which is the one
|
|
85
|
+
degradation this library may not ship. */
|
|
76
86
|
--ring-focus: 0 0 0 3px rgba(38, 109, 240, 0.35);
|
|
87
|
+
--ring-focus: 0 0 0 3px rgb(from var(--accent) r g b / 0.35);
|
|
77
88
|
|
|
78
89
|
/* ---- Radii ------------------------------------------------------------ */
|
|
79
90
|
--radius-xs: 2px;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sheleg-design-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.0",
|
|
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 sixteen locked style packs with ready-made design tokens — instrument-console, editorial-luxury, workbench, briefing-room, atrium, orchard, field-notes, cyclorama, showroom, blueprint, prism, maquette, scoreboard, datasheet, manpage and pigeonhole. 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"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "sheleg-design",
|
|
3
3
|
"displayName": "SHELEG Design",
|
|
4
4
|
"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 sixteen pluggable visual style packs — instrument-console (dark console), editorial-luxury (warm editorial), workbench (light/dark product UI for dashboards and tools), briefing-room (dark 16:9 deck), atrium (warm consumer health), orchard (friendly consumer biotech), field-notes (warm paper for dev tools sold on auditability), cyclorama (a pastel field on a 32s cycle), showroom (the product as the exhibit), blueprint (a drawing sheet, zero radius), prism (one iridescent wash over mono body), maquette (cream axonometric models on a dark table), scoreboard (warm paper, pixel numerals, a dark ledger of results), datasheet (an off-white spec sheet whose live instrument goes dark when it detects the reader is hiding), manpage (a developer landing page set in the reader's own system monospace on cream paper, with coral label chips that are real headings and a dark code frame as the argument), pigeonhole (a white sorting wall whose nine pastel categories are a filing scheme rather than a mood, each a two-layer chip whose label word is mandatory). Ships the sheleg-design skill, the architecture reference, the motion doctrine, the Figma and Claude Design bridges, AI-surface patterns, style packs with ready-made token CSS, and the /sheleg-design command.",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.22.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "ssheleg",
|
|
8
8
|
"url": "https://x.com/sshlg93"
|
|
@@ -3,7 +3,7 @@ name: sheleg-design
|
|
|
3
3
|
description: Use when building or upgrading a cinematic scroll-driven landing page, marketing site or hero (particle/WebGL background, scroll-linked animation, parallax, scrubbed sections) — when such a page feels busy or janky or its motion layers drift out of sync — or when styling product UI with its style packs - dashboards, admin panels, internal/dev tools, mobile app screens, design tokens, light/dark themes - or when carrying a visual system across the Figma border (publishing tokens as variables, implementing a design without importing raw values). Triggers - "cinematic landing" / "кинематографичный лендинг", "scroll animation" / "скролл-анимация", "dashboard style" / "стиль дашборда", "design tokens" / "дизайн-токены", "light/dark theme" / "светлая/тёмная тема", "figma variables / figma to code" / "переменные фигмы, фигма в код", "chat/agent UI" / "интерфейс чата или агента", "streaming output" / "стриминг ответа", "mobile screen" / "мобильный экран".
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: 1.
|
|
6
|
+
version: 1.22.0
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# SHELEG Design
|
|
@@ -48,9 +48,36 @@ and no clone.
|
|
|
48
48
|
you state recomputed from your token layer, plus OKLab separation under
|
|
49
49
|
protanopia / deuteranopia / tritanopia), and slop lint (the skill obeying its
|
|
50
50
|
own bans). Two consequences while authoring: the palette gate cannot compute
|
|
51
|
-
a value it cannot parse, so
|
|
52
|
-
|
|
53
|
-
do not fork against a pack you
|
|
51
|
+
a value it cannot parse, so a colour it cannot read is a **failure** rather
|
|
52
|
+
than a skip (see rule 5 for what it can read now); and a markdown link from
|
|
53
|
+
your pack to another must be reciprocated, so do not fork against a pack you
|
|
54
|
+
are not also editing.
|
|
55
|
+
5. **Derive a colour from a token instead of restating its channels.** Until
|
|
56
|
+
1.22.0 this rule was the opposite one — `color-mix()` was banned from the token
|
|
57
|
+
layer — and the reason was never a design position, it was the gate's parser.
|
|
58
|
+
It parses both now, verified against Chrome's own computed values across eleven
|
|
59
|
+
cases at a worst ΔE of 0.004:
|
|
60
|
+
|
|
61
|
+
- `color-mix(in srgb | srgb-linear | oklab | oklch, A p%, B q%)` — premultiplied,
|
|
62
|
+
shorter hue arc in the polar space. **Any other space still fails**, because
|
|
63
|
+
mixing in `srgb` and mixing in `oklab` give visibly different midpoints and a
|
|
64
|
+
gate that guessed would certify a colour nobody rendered.
|
|
65
|
+
- `rgb(from <colour> r g b / a)` — the alpha-variant form. `oklch(from …)` and a
|
|
66
|
+
`calc()` inside a channel still fail: half-implemented CSS maths is worse than
|
|
67
|
+
an honest refusal.
|
|
68
|
+
- `var()` now resolves **inside** a value, so `rgb(from var(--accent) r g b / .35)`
|
|
69
|
+
is readable by the gate.
|
|
70
|
+
|
|
71
|
+
Why it matters: 42 declarations across eight shipped token layers restate a
|
|
72
|
+
token's channels by hand, and a hand-derived literal stops tracking its source
|
|
73
|
+
the moment either one moves — which is the live defect behind board B-023/B-024.
|
|
74
|
+
`showroom`'s focus ring is the worked example.
|
|
75
|
+
|
|
76
|
+
**One rule when you migrate.** Relative colour is Baseline 2024, so a browser
|
|
77
|
+
that cannot parse it drops the declaration. Where the token feeds an
|
|
78
|
+
accessibility-critical property — a focus ring above all — ship the literal
|
|
79
|
+
first and the derived value second, so the old browser keeps the literal. For
|
|
80
|
+
an ordinary decorative tint the derived value alone is fine.
|
|
54
81
|
|
|
55
82
|
## Register
|
|
56
83
|
|
|
@@ -73,7 +73,18 @@
|
|
|
73
73
|
0 8px 16px -4px rgba(28, 29, 31, 0.04),
|
|
74
74
|
0 16px 32px -8px rgba(28, 29, 31, 0.05),
|
|
75
75
|
0 32px 64px -8px rgba(28, 29, 31, 0.06);
|
|
76
|
+
/* The ring is the accent at 35%, and it now says so instead of restating the
|
|
77
|
+
accent's channels by hand. Measured equal: rgba(38, 109, 240, 0.35) and
|
|
78
|
+
`rgb(from var(--accent) r g b / .35)` are ΔE 0.00 apart, so nothing a reader
|
|
79
|
+
sees changes — what changes is that re-tinting --accent now re-tints the ring,
|
|
80
|
+
where before it kept the old blue silently (board B-023/B-024).
|
|
81
|
+
The literal stays as the first declaration on purpose: relative colour is
|
|
82
|
+
Baseline 2024, and a browser that does not parse the second line keeps the
|
|
83
|
+
first. For an ordinary colour that would be belt-and-braces; for a FOCUS RING
|
|
84
|
+
a dropped declaration is an invisible focus indicator, which is the one
|
|
85
|
+
degradation this library may not ship. */
|
|
76
86
|
--ring-focus: 0 0 0 3px rgba(38, 109, 240, 0.35);
|
|
87
|
+
--ring-focus: 0 0 0 3px rgb(from var(--accent) r g b / 0.35);
|
|
77
88
|
|
|
78
89
|
/* ---- Radii ------------------------------------------------------------ */
|
|
79
90
|
--radius-xs: 2px;
|