sheleg-design-skill 1.35.0 → 1.36.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 +39 -0
- package/kits/awning/src/styles.css +17 -2
- 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/awning.md +23 -4
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/awning.css +8 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,45 @@ 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.36.0] - 2026-08-16
|
|
8
|
+
|
|
9
|
+
**`awning` shipped as a specification and had never been rendered.** Asked whether the
|
|
10
|
+
design itself had been done, the answer was no: a pack, a token layer and a nine-component
|
|
11
|
+
kit that typechecks, and not one pixel looked at. A page was built in the kit and
|
|
12
|
+
photographed, and it produced three findings the token layer could not — two of them
|
|
13
|
+
defects in the reference that survived the 1.35.0 release precisely because that release
|
|
14
|
+
was read rather than seen.
|
|
15
|
+
|
|
16
|
+
### Fixed — in `awning`
|
|
17
|
+
|
|
18
|
+
- **A secondary control's border misses the contrast floor for a control boundary.**
|
|
19
|
+
`--line-strong` `#d4d4d8` is **1.48:1** on white against WCAG's **3:1** for a UI component
|
|
20
|
+
boundary — short by half. It matters more here than it would anywhere else, because a
|
|
21
|
+
secondary button in this system is `transparent` at rest, hover, active *and* disabled: the
|
|
22
|
+
border is not decoration around the control, it **is** the control. `--shade-40` does not
|
|
23
|
+
reach the floor either (2.56:1). **New `--control-border`** `#71717a`, 4.83:1, the first
|
|
24
|
+
step on the ramp that clears it. Found by looking at a "Talk to sales" button beside a
|
|
25
|
+
black pill and seeing it nearly disappear.
|
|
26
|
+
- **The second field is declared and a page built from the pack will not use it.**
|
|
27
|
+
`--bg-deep` existed from the first release and the first page rendered ran fifteen sections
|
|
28
|
+
on pure white without touching it, because nothing forces the alternation and white is the
|
|
29
|
+
default of everything. A front door in this register is long; a long page on one field
|
|
30
|
+
reads as one endless scroll. Recorded as a trap with the instruction to alternate by
|
|
31
|
+
section and to spend the change where the argument changes.
|
|
32
|
+
- **A `Stat`'s label and its sub were the same grey**, so the number read as sandwiched
|
|
33
|
+
between two equal lines rather than as the thing the block is about. The sub drops to
|
|
34
|
+
`--ink-faint`; the constraint that comes with it — 4.40:1 on `--bg-deep`, so a Stat on the
|
|
35
|
+
second field moves its sub back to `--ink-soft` — is written beside it.
|
|
36
|
+
- **A `FeatureRow`'s mono index was top-aligned** against a title set larger, and floated
|
|
37
|
+
free of the line it belongs to. It takes the title's leading now.
|
|
38
|
+
|
|
39
|
+
### Note
|
|
40
|
+
|
|
41
|
+
Gotchas went from six to eight, and the header now says which of them were found by
|
|
42
|
+
rendering rather than by reading. That distinction is the point of this release: the pack
|
|
43
|
+
passed three validators, both `--strict` runs and a typecheck at 1.35.0 with two
|
|
44
|
+
accessibility defects in it, and neither was reachable without building a page.
|
|
45
|
+
|
|
7
46
|
## [1.35.0] - 2026-08-15
|
|
8
47
|
|
|
9
48
|
**The twenty-first pack, and two counts that had been wrong for eight releases.**
|
|
@@ -51,6 +51,14 @@
|
|
|
51
51
|
the lighter one between rows and the heavier one around a control. */
|
|
52
52
|
--line: var(--shade-20); /* 1.27:1 on --bg */
|
|
53
53
|
--line-strong: var(--shade-30); /* 1.48:1 on --bg */
|
|
54
|
+
/* DERIVED, and it exists because rendering the pack found the reference short.
|
|
55
|
+
A secondary control here is transparent in every state, so its border IS the
|
|
56
|
+
control — and WCAG's floor for a UI component boundary is 3:1, which
|
|
57
|
+
--line-strong misses by half. --shade-40 does not reach it either (2.56:1).
|
|
58
|
+
--control-border is 4.83:1 on --bg, the first step on the ramp that clears
|
|
59
|
+
the floor. Use --line-strong for a decorative edge and this for anything a
|
|
60
|
+
reader is meant to press. See Gotcha 7. */
|
|
61
|
+
--control-border: var(--shade-50);
|
|
54
62
|
|
|
55
63
|
/* ── THE accent, and it is black ─────────────────────────────────────────
|
|
56
64
|
Not a stylistic absence — a resolved chain. `--color-component-button-
|
|
@@ -232,7 +240,7 @@ strong, b { font-weight: var(--weight-bold); }
|
|
|
232
240
|
.aw-btn--primary:disabled { background: var(--accent-disabled); color: var(--accent-ink-disabled); cursor: default; }
|
|
233
241
|
|
|
234
242
|
/* Transparent at every state — the border and the label carry the whole control. */
|
|
235
|
-
.aw-btn--secondary { background: transparent; color: var(--ink); border-color: var(--
|
|
243
|
+
.aw-btn--secondary { background: transparent; color: var(--ink); border-color: var(--control-border); }
|
|
236
244
|
.aw-btn--secondary:hover:not(:disabled) { border-color: var(--accent-hover); }
|
|
237
245
|
.aw-btn--secondary:active:not(:disabled) { border-color: var(--accent-active); color: var(--accent-active); }
|
|
238
246
|
.aw-btn--secondary:disabled { border-color: var(--accent-disabled); color: var(--accent-ink-disabled); cursor: default; }
|
|
@@ -303,7 +311,11 @@ strong, b { font-weight: var(--weight-bold); }
|
|
|
303
311
|
font-weight: var(--weight-bold); color: var(--ink);
|
|
304
312
|
font-variant-numeric: tabular-nums;
|
|
305
313
|
}
|
|
306
|
-
|
|
314
|
+
/* --ink-faint, not --ink-soft: rendered, the label above and the sub below were
|
|
315
|
+
the same grey and the number read as sandwiched between two equal lines. This
|
|
316
|
+
is 4.83:1 on --bg. A Stat placed on --bg-deep must move its sub to --ink-soft,
|
|
317
|
+
where --ink-faint drops to 4.40:1 (Gotcha 1). */
|
|
318
|
+
.aw-stat__sub { font-size: var(--fs-b5); line-height: var(--lh-b5); color: var(--ink-faint); }
|
|
307
319
|
|
|
308
320
|
/* ---- ProductFrame: colourless chrome around full-colour content --------- */
|
|
309
321
|
.aw-frame {
|
|
@@ -348,6 +360,9 @@ strong, b { font-weight: var(--weight-bold); }
|
|
|
348
360
|
.aw-feature__index {
|
|
349
361
|
flex: none; min-width: 2.5rem;
|
|
350
362
|
font-family: var(--mono); font-size: var(--fs-b5);
|
|
363
|
+
/* The title's cap-height, not the row's top — rendered, a top-aligned index
|
|
364
|
+
floats above a line set at a larger size and reads as unattached. */
|
|
365
|
+
line-height: var(--lh-t6);
|
|
351
366
|
color: var(--ink-faint);
|
|
352
367
|
}
|
|
353
368
|
.aw-feature__body { display: flex; flex-direction: column; gap: var(--space-xs); }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sheleg-design-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.36.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 twenty-two 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, pigeonhole, roster, ora, tenor, paperclip and ledger. 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 twenty-two 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), roster (a white field in a faint grid of squares whose argument is other people's marks — client logotypes in pill-labelled industry columns, an engine's wordmark inside the headline — where the proof is a name rather than a number), ora (a warm coal field with cream ink and no third hue — the accent is the inverted field — a serif carrying every human sentence over a monospace carrying every machine fact, a terminal surface cut below the page, and a six-step verdict ramp, for products whose output is a machine's verdict about the reader), tenor (warm paper with zero radius and zero shadow, one hairline weight, an orange that exists only on hover and on focus, a sans tracked negative against a mono tracked positive, display at a line-height below one in an eight-to-twelve-character measure, and product proof delivered as silent looping video, for products arguing that a new kind of thing must be managed like an existing organisation), paperclip (neutral coal with no functional colour at all — every control monochrome and elevation made of hairlines, with the whole chromatic budget spent on a curtain of gradient capsules and twelve gradient section badges that cannot be clicked — for products that ask a person to run something that runs itself: agent teams, autonomous back-office, schedulers and budget-governed compute), ledger (warm cream paper ruled by a hairline at 12% ink and no shadow on any card, radius 15 nested concentrically, an ink primary button and a terracotta accent that never fills a control — it labels, as a 10px monospace uppercase kicker — with a seal on every card stating how its number is known, for the console of a product that answers questions about data: AI analysts, BI surfaces, query workspaces). 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, and awning (a white forecourt where the accent is black and no hue reaches the chrome at all, a pill whose radius is a declared component token, one variable grotesque at 420/550 with no 700, and a single three-layer shadow, for commerce and platform front doors).",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.36.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.36.0
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# SHELEG Design
|
|
@@ -68,7 +68,8 @@ file verbatim instead of transcribing this table.
|
|
|
68
68
|
| `--ink-soft` | `#52525b` | **prose** — the value that holds on both fields | 7.73:1 |
|
|
69
69
|
| `--ink-faint` | `#71717a` | meta and non-text marks — **not prose**, see Gotcha 1 | 4.83:1 |
|
|
70
70
|
| `--line` | `#e4e4e7` | between rows | 1.27:1 |
|
|
71
|
-
| `--line-strong` | `#d4d4d8` |
|
|
71
|
+
| `--line-strong` | `#d4d4d8` | a decorative edge | 1.48:1 |
|
|
72
|
+
| `--control-border` | `#71717a` | **derived** — the boundary of a pressable control | 4.83:1 |
|
|
72
73
|
| `--accent` | `#000000` | every primary action | 21.00:1 |
|
|
73
74
|
| `--accent-ink` | `#ffffff` | text ON the accent | — |
|
|
74
75
|
| `--good` | `#0b6b3a` | **derived** — success on a product surface | 6.61:1 |
|
|
@@ -257,19 +258,37 @@ why a copy inherits them.
|
|
|
257
258
|
lands in the exact moment after a click when the reader is watching hardest.
|
|
258
259
|
The reference ships it as a token, which makes reaching for it easy; keep it
|
|
259
260
|
for something leaving the screen entirely, and prefer `ease-in-out` even then.
|
|
260
|
-
4. **
|
|
261
|
+
4. **A secondary control's border misses the floor for a control boundary.**
|
|
262
|
+
`--line-strong` `#d4d4d8` is **1.48:1** on white, and WCAG's floor for a UI
|
|
263
|
+
component boundary is **3:1** — so it fails by half. This matters more here
|
|
264
|
+
than it would in most packs, because a secondary button in this system is
|
|
265
|
+
`transparent` at rest, hover, active *and* disabled: the border is not
|
|
266
|
+
decoration around the control, it **is** the control. `--shade-40` does not
|
|
267
|
+
reach the floor either (2.56:1). `--control-border` `#71717a` is the first
|
|
268
|
+
step on the ramp that clears it, at 4.83:1. Found by rendering a page in the
|
|
269
|
+
pack and looking at a "Talk to sales" button beside a black pill, where it
|
|
270
|
+
nearly disappeared — not by reading the token layer, which is why it survived
|
|
271
|
+
the first release.
|
|
272
|
+
5. **The second field exists and a page built from this pack will not use it.**
|
|
273
|
+
`--bg-deep` is declared, and the first page rendered in this pack ran fifteen
|
|
274
|
+
sections on pure white without touching it — because nothing in the token
|
|
275
|
+
layer forces the alternation and white is the default of everything. A front
|
|
276
|
+
door in this register is long and sectioned, and a long page on one field
|
|
277
|
+
reads as one endless scroll. **Alternate the field by section**, and use the
|
|
278
|
+
change to mark where the argument changes, not decoratively.
|
|
279
|
+
6. **The shade ramp is Tailwind's `zinc`, renamed.** `#f4f4f5`, `#e4e4e7`,
|
|
261
280
|
`#d4d4d8`, `#a1a1aa`, `#71717a`, `#52525b`, `#3f3f46`, `#18181b` are that
|
|
262
281
|
palette exactly. This is not a criticism — a bought ramp used deliberately,
|
|
263
282
|
with semantic roles layered over it, is a different thing from a bought theme
|
|
264
283
|
used by default. But it matters when someone asks whether the greys are
|
|
265
284
|
"yours": they are chosen, not authored, and a second product on the same ramp
|
|
266
285
|
will look related whether or not you meant it.
|
|
267
|
-
|
|
286
|
+
7. **The token layer is three tiers deep and a copy usually flattens it.**
|
|
268
287
|
`--color-component-button-primary-bg` → `--color-theme-bg-cta` → `#000` is
|
|
269
288
|
three lookups to reach one colour, and it is worth every one of them: the theme
|
|
270
289
|
tier is where a co-brand or a locale swaps in. Flatten the chain when copying
|
|
271
290
|
and the system still renders, having lost the only seam it was built around.
|
|
272
|
-
|
|
291
|
+
8. **The delivered CSS is 542 KB and most of it is a utility bundle.** Counting
|
|
273
292
|
`border-radius` across the whole payload returns nineteen values and counting
|
|
274
293
|
transitions returns twenty-five, which reads as sprawl. It is not: the *system*
|
|
275
294
|
is `--radius-*` (four values plus full), one shadow and three weights, and the
|
|
@@ -51,6 +51,14 @@
|
|
|
51
51
|
the lighter one between rows and the heavier one around a control. */
|
|
52
52
|
--line: var(--shade-20); /* 1.27:1 on --bg */
|
|
53
53
|
--line-strong: var(--shade-30); /* 1.48:1 on --bg */
|
|
54
|
+
/* DERIVED, and it exists because rendering the pack found the reference short.
|
|
55
|
+
A secondary control here is transparent in every state, so its border IS the
|
|
56
|
+
control — and WCAG's floor for a UI component boundary is 3:1, which
|
|
57
|
+
--line-strong misses by half. --shade-40 does not reach it either (2.56:1).
|
|
58
|
+
--control-border is 4.83:1 on --bg, the first step on the ramp that clears
|
|
59
|
+
the floor. Use --line-strong for a decorative edge and this for anything a
|
|
60
|
+
reader is meant to press. See Gotcha 7. */
|
|
61
|
+
--control-border: var(--shade-50);
|
|
54
62
|
|
|
55
63
|
/* ── THE accent, and it is black ─────────────────────────────────────────
|
|
56
64
|
Not a stylistic absence — a resolved chain. `--color-component-button-
|