sheleg-design-skill 1.57.0 → 1.58.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 +86 -0
- package/kits/chorus/src/Slab.md +4 -2
- package/kits/chorus/src/Slab.tsx +1 -1
- package/kits/chorus/src/styles.css +61 -9
- package/kits/surveyor/src/styles.css +14 -0
- package/package.json +5 -3
- package/plugins/sheleg-design/.claude-plugin/plugin.json +1 -1
- package/plugins/sheleg-design/skills/sheleg-design/MOTION_DOCTRINE.md +8 -4
- package/plugins/sheleg-design/skills/sheleg-design/SKILL.md +1 -1
- package/plugins/sheleg-design/skills/sheleg-design/styles/chorus.md +31 -15
- package/plugins/sheleg-design/skills/sheleg-design/styles/surveyor.md +7 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/chorus.css +61 -9
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/surveyor.css +14 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,92 @@ follow [SemVer](https://semver.org/spec/v2.0.0.html).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.58.0] - 2026-08-30
|
|
10
|
+
|
|
11
|
+
### The catalogue stops being the one surface nobody designed, and two blind reads land
|
|
12
|
+
|
|
13
|
+
**The site is now built from a pack.** The two generators behind
|
|
14
|
+
`ssheleg.github.io/sheleg-design-skill` carried **sixty-seven colour literals**
|
|
15
|
+
between them — a dark-only scheme that appears in no pack, answers no
|
|
16
|
+
`prefers-color-scheme`, and had never been through the contrast gate every pack must
|
|
17
|
+
pass. A library that ships thirty-nine measured token layers and paints its own
|
|
18
|
+
catalogue in an undocumented one is arguing against itself.
|
|
19
|
+
|
|
20
|
+
`tools/chrome.py` is the shell now: it inlines `styles/tokens/workbench.css`
|
|
21
|
+
**verbatim** and the site's own CSS consumes `var(--…)` and nothing else.
|
|
22
|
+
`workbench` for two checkable reasons — it is the library's stated default for
|
|
23
|
+
product UI, which is what a catalogue is, and it is one of only two packs shipping a
|
|
24
|
+
full `[data-theme="dark"]` twin, which a public page needs. The theme follows the
|
|
25
|
+
pack's own written instruction (*"keep one switch, never two sources of truth"*): a
|
|
26
|
+
`prefers-color-scheme` listener sets `data-theme`, and the two `theme-color` meta
|
|
27
|
+
tags are **derived** from the layer's `--bg` rather than typed. `no_literals()` runs
|
|
28
|
+
on every build and in `npm test`, so this cannot rot back.
|
|
29
|
+
|
|
30
|
+
The site's links honour the pack rather than override it: `--accent` is declared
|
|
31
|
+
`@role non-text` at 4.30:1, so a link is `--ink` wearing an accent underline, and
|
|
32
|
+
hover thickens the rule instead of recolouring the word.
|
|
33
|
+
|
|
34
|
+
**The front door had been publishing 39 blank cards.** `tools/gallery.py` parsed the
|
|
35
|
+
pack catalogue out of `SKILL.md` long after that table moved to
|
|
36
|
+
`STYLE_PACK_INDEX.md`. The regex matched nothing, `look` and `for` came back empty
|
|
37
|
+
for **every** pack, and the live site shipped *"Choose for"* followed by silence on
|
|
38
|
+
all thirty-nine — with the JSON-LD `ItemList` descriptions and the `llms.txt`
|
|
39
|
+
entries empty behind it. Nothing failed, because an empty string is a valid string.
|
|
40
|
+
Fixed, and the parse is now asserted: a run that finds no catalogue rows stops
|
|
41
|
+
instead of publishing a catalogue with no prose in it.
|
|
42
|
+
|
|
43
|
+
### Scenario T37 ran, both branches passed, and cost 29 findings
|
|
44
|
+
|
|
45
|
+
Written on 2026-08-30 with its debt stated; run the same day once subagents were
|
|
46
|
+
available. Both branches blind against the bundle directory, both correct — `T37a`
|
|
47
|
+
reached `chorus` from a quoted-thread brief, `T37b` **stayed on `surveyor`** from an
|
|
48
|
+
enterprise-tracker brief, which is the failure a positive-only branch cannot detect.
|
|
49
|
+
|
|
50
|
+
**Twelve of `T37a`'s sixteen findings on `chorus` are fixed here.** The three that
|
|
51
|
+
mattered were invisible to every gate:
|
|
52
|
+
|
|
53
|
+
- `--on-status` stayed at its root white inside the slab block, putting **white on
|
|
54
|
+
the mint at 1.32:1** — in the one surface the pack invented the mint for. The
|
|
55
|
+
comment above that block said it owed "two tokens" while the block changed five.
|
|
56
|
+
It now re-declares six, and the count is stated.
|
|
57
|
+
- The slab's overrides **inherited into light descendants**: a white card nested in a
|
|
58
|
+
slab took a white hairline and re-admitted the mint the pack's own Bans forbid on
|
|
59
|
+
paper. A nested light surface takes its tokens back.
|
|
60
|
+
- The Responsive section's opening sentence contradicted its own table two lines
|
|
61
|
+
below: *"768 and 1440 differ only in the frame, not in the type"*, against a table
|
|
62
|
+
giving the display 40px at 768 and 56px at 1440.
|
|
63
|
+
|
|
64
|
+
Also: `--track-h2-sm` now exists for the narrow section head the Responsive table
|
|
65
|
+
asks for; the Delta chip's "wash" is two real tokens (`--good-weak`,
|
|
66
|
+
`--danger-weak`); the provenance legend names the family it actually uses
|
|
67
|
+
(**PACK DECISION**, and no SELECTED); one ratio was wrong (`--parchment` on `--bg` is
|
|
68
|
+
1.14:1, not 1.15); "a factor of three" was 2.8; the eyebrow was two objects with two
|
|
69
|
+
sizes; three things were called a pill and none of them used `--r-pill`; and the
|
|
70
|
+
slab hook is now the library's own unprefixed `[data-surface="slab"]` — chorus had
|
|
71
|
+
been the only pack you could not A/B by swapping the token layer alone.
|
|
72
|
+
|
|
73
|
+
**One of `T37b`'s thirteen findings on `surveyor` is fixed here**, because it is an
|
|
74
|
+
accessibility hole with a one-token remedy: `--focus-color` is `--action`, and
|
|
75
|
+
`#0a7269` on the pack's own `--accent` closer panel measures **1.55:1** — under the
|
|
76
|
+
3:1 mark floor, on the surface carrying the final CTA. `[data-surface="accent"]` now
|
|
77
|
+
re-declares the ring to the pack's `--bg` at 3.54:1. The other eight are verified and
|
|
78
|
+
filed as B-137 for the pack's author, per the B-134/B-135 precedent.
|
|
79
|
+
|
|
80
|
+
**Both branches found the same third-party defect, and neither pack could have
|
|
81
|
+
caught it.** `MOTION_DOCTRINE.md` called `bulletin` at 3 *"the lowest ceiling in the
|
|
82
|
+
library"* — false for four releases, while four packs pin **2**. Corrected, and
|
|
83
|
+
`validate_motion_ceiling_floor()` now recomputes both the minimum and the count from
|
|
84
|
+
the packs' own Register lines; it was watched failing against a planted 3 before it
|
|
85
|
+
went green.
|
|
86
|
+
|
|
87
|
+
### Ledgers
|
|
88
|
+
|
|
89
|
+
B-136 closed. B-137 and B-138 opened with the verified remainder. `REQ-CHORUS-3`
|
|
90
|
+
moves off `never`, taking the ledger from two `never` rows to one. The `chorus`
|
|
91
|
+
acceptance record's REQ-10/11/12 are closed against receipts — including the one
|
|
92
|
+
that is only **partly** met and says so: the launcher's pin still names v1.54.0,
|
|
93
|
+
because that repository holds ~2,100 lines of another session's uncommitted work.
|
|
94
|
+
|
|
9
95
|
## [1.57.0] - 2026-08-30
|
|
10
96
|
|
|
11
97
|
### The siblings are declared, the maps are derived, the descriptions stop scarring
|
package/kits/chorus/src/Slab.md
CHANGED
|
@@ -5,8 +5,10 @@ category: Surfaces
|
|
|
5
5
|
The dark band cut into the paper: `--slab` at `--r-panel`, inset `--slab-inset` (30px,
|
|
6
6
|
measured against the viewport rather than a parent), full width otherwise.
|
|
7
7
|
|
|
8
|
-
It carries `data-
|
|
9
|
-
|
|
8
|
+
It carries `data-surface="slab"` — the library's own unprefixed hook, so this pack
|
|
9
|
+
can be A/B'd against any other by swapping the token layer alone — and that
|
|
10
|
+
attribute is what re-declares the six tokens that would otherwise resolve to a
|
|
11
|
+
light-field value on a dark ground. That re-declaration is not decoration:
|
|
10
12
|
the ink focus ring measures 1.00:1 against `--slab` and would vanish on the band that
|
|
11
13
|
carries the closing CTA.
|
|
12
14
|
|
package/kits/chorus/src/Slab.tsx
CHANGED
|
@@ -39,10 +39,16 @@
|
|
|
39
39
|
|
|
40
40
|
MEASURED — the literal was computed on the live page or read from an authored
|
|
41
41
|
Framer token that the census confirmed paints.
|
|
42
|
-
SELECTED — a value the reference ships in another role, taken because a floor
|
|
43
|
-
forces the move; only the role changes.
|
|
44
42
|
DERIVED — computed from a token here because the reference's own value fails a
|
|
45
43
|
floor. Hue is held; lightness moves and chroma is clipped to gamut.
|
|
44
|
+
PACK DECISION — a value the reference does not carry at all, so there was
|
|
45
|
+
nothing to measure. Two of them, and both are named where they sit: the
|
|
46
|
+
mirrored cut corner, which the reference ships in one direction only, and the
|
|
47
|
+
state clock, because the reference's controls compute to 0s.
|
|
48
|
+
|
|
49
|
+
There is no SELECTED family here. The reference offers no darker step of its own
|
|
50
|
+
in any hue that fails, so every correction below had to be DERIVED — which is
|
|
51
|
+
the opposite of `surveyor`, whose whole remedy was its reference's own ladder.
|
|
46
52
|
|
|
47
53
|
The corrections are in the pack's Gotchas, and there are six. */
|
|
48
54
|
|
|
@@ -150,6 +156,13 @@
|
|
|
150
156
|
--danger: #d03950;
|
|
151
157
|
--info: #1167f4;
|
|
152
158
|
--on-status: #ffffff; /* 4.84:1 on --good, 4.79:1 on --danger, 4.92:1 on --info */
|
|
159
|
+
/* The delta chip's ground. The reference paints its rose at two alphas over the
|
|
160
|
+
field (10% and 15%); the green wash is the same construction at the same
|
|
161
|
+
alpha, which is a PACK DECISION stated rather than a measurement implied.
|
|
162
|
+
@role non-text: --good-weak, --danger-weak — a tint under a figure that
|
|
163
|
+
carries its own solid; nothing is written ON them. */
|
|
164
|
+
--good-weak: rgba(25, 132, 0, 0.1);
|
|
165
|
+
--danger-weak: rgba(208, 57, 80, 0.1);
|
|
153
166
|
|
|
154
167
|
/* ---- Status on the slab: a separate ladder, and the mint lives only here */
|
|
155
168
|
/* MEASURED on the dark wells. The mint is the identity of the reading — 36
|
|
@@ -215,7 +228,10 @@
|
|
|
215
228
|
--focus-w: 2px;
|
|
216
229
|
--focus-offset: 2px;
|
|
217
230
|
--focus-color: var(--ink-strong);
|
|
218
|
-
|
|
231
|
+
/* It points at the ink token rather than at --paper: a ring on the dark IS ink,
|
|
232
|
+
and two names for one value is what this file's own coral comment argues
|
|
233
|
+
against. The ratio it has to clear is the one --on-slab already states. */
|
|
234
|
+
--focus-color-on-dark: var(--on-slab);
|
|
219
235
|
|
|
220
236
|
/* ---- Radii: a measured ladder, and one corner that is not there -------- */
|
|
221
237
|
/* MEASURED across the census: 8px on a badge, 10px on a chip and eyebrow, 12px
|
|
@@ -240,8 +256,13 @@
|
|
|
240
256
|
--r-bubble: 24px 0 24px 24px;
|
|
241
257
|
--r-bubble-mirror: 0 24px 24px 24px;
|
|
242
258
|
|
|
243
|
-
/* ---- Spacing:
|
|
244
|
-
/*
|
|
259
|
+
/* ---- Spacing: the measured steps, named by their step number ---------- */
|
|
260
|
+
/* The suffix is the ladder's INDEX, not the value in quarters — `--space-10`
|
|
261
|
+
is the tenth step and it is 32px. That is worth stating because the values
|
|
262
|
+
are the reference's own measured gaps (4, 6, 8, 10, 12, 16, 24, 32, 40, 100)
|
|
263
|
+
and two of them are not multiples of four, so no arithmetic reading of the
|
|
264
|
+
name survives contact with the ladder. Read the comment, not the number.
|
|
265
|
+
MEASURED. The card's padding is 32px and its internal gap is 32px, and
|
|
245
266
|
NEITHER CHANGES at 390 — the card keeps desktop padding on a 350px sheet,
|
|
246
267
|
which is a deliberate property of the reference and is stated in Responsive.
|
|
247
268
|
The section rhythm is 100px at desktop. */
|
|
@@ -310,6 +331,9 @@
|
|
|
310
331
|
--track-display: -0.0625em; /* MEASURED — -3.5px at 56px */
|
|
311
332
|
--track-display-sm: -0.025em; /* MEASURED — -1px at 40px; it RELAXES */
|
|
312
333
|
--track-h2: -0.032em; /* MEASURED — -1.4px at 44px */
|
|
334
|
+
--track-h2-sm: -0.025em; /* MEASURED — -1px at 34px, the narrow section head.
|
|
335
|
+
It exists because the Responsive table asks for it: a size step with no
|
|
336
|
+
tracking token forces the literal this library bans everywhere else. */
|
|
313
337
|
--track-quote: -0.02em; /* MEASURED — -0.48px at 24px */
|
|
314
338
|
|
|
315
339
|
--weight-body: 400;
|
|
@@ -339,11 +363,21 @@
|
|
|
339
363
|
line-height: var(--lh-body);
|
|
340
364
|
}
|
|
341
365
|
|
|
342
|
-
/* The slab is a surface, not a theme — the page never inverts.
|
|
343
|
-
|
|
344
|
-
|
|
366
|
+
/* The slab is a surface, not a theme — the page never inverts. The hook is the
|
|
367
|
+
library's own `[data-surface]`, unprefixed: every other surface-variant pack in
|
|
368
|
+
this collection uses that attribute, and the index's selection protocol says to
|
|
369
|
+
compare candidates by changing the token layer alone. A namespaced hook would
|
|
370
|
+
have made chorus the one pack you cannot A/B without editing the markup, which
|
|
371
|
+
is a cost paid by every reader to buy nothing. `.chorus-slab` is kept beside it
|
|
372
|
+
as an alias, because a class is what a component library reaches for.
|
|
373
|
+
|
|
374
|
+
What the block owes is every token that would otherwise resolve to a light-field
|
|
375
|
+
value on a dark ground. There are SIX, and the count is stated because the first
|
|
376
|
+
version of this block listed two, changed five, and left the sixth — --on-status
|
|
377
|
+
— at its root white, which put white on the mint at 1.32:1 inside the one
|
|
378
|
+
surface the pack invented the mint for. */
|
|
345
379
|
.chorus-slab,
|
|
346
|
-
[data-
|
|
380
|
+
[data-surface="slab"] {
|
|
347
381
|
background-color: var(--slab);
|
|
348
382
|
color: var(--on-slab);
|
|
349
383
|
--focus-color: var(--focus-color-on-dark);
|
|
@@ -351,6 +385,24 @@
|
|
|
351
385
|
--good: var(--good-on-dark);
|
|
352
386
|
--danger: var(--danger-on-dark);
|
|
353
387
|
--info: var(--info-on-dark);
|
|
388
|
+
/* The sixth. On the on-dark ladder the label is INK, not white: --slab on the
|
|
389
|
+
mint is 13.31:1, on the rose 6.01:1, on the periwinkle 7.40:1. White on those
|
|
390
|
+
three is 1.32:1, 2.93:1 and 2.38:1 — the first of them invisible. */
|
|
391
|
+
--on-status: var(--slab);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/* Custom properties inherit, and a slab is a section rather than a leaf: a white
|
|
395
|
+
card placed inside one would take the slab's white hairline and its mint, which
|
|
396
|
+
is the pack's own ban ("No mint on paper") arriving by inheritance. A light
|
|
397
|
+
surface nested in a slab therefore takes its tokens back. */
|
|
398
|
+
.chorus-slab :is(.ch-card, .ch-well--paper, [data-surface="paper"]),
|
|
399
|
+
[data-surface="slab"] :is(.ch-card, .ch-well--paper, [data-surface="paper"]) {
|
|
400
|
+
--focus-color: var(--ink-strong);
|
|
401
|
+
--line: rgba(70, 72, 77, 0.12);
|
|
402
|
+
--good: #198400;
|
|
403
|
+
--danger: #d03950;
|
|
404
|
+
--info: #1167f4;
|
|
405
|
+
--on-status: #ffffff;
|
|
354
406
|
}
|
|
355
407
|
|
|
356
408
|
/* The reference ships ZERO prefers-reduced-motion rules across 274KB. This block
|
|
@@ -152,6 +152,13 @@
|
|
|
152
152
|
--focus-w: 2px;
|
|
153
153
|
--focus-offset: 2px;
|
|
154
154
|
--focus-color: var(--action);
|
|
155
|
+
/* The ring VANISHES on the one surface the pack fills with --accent: #0a7269 on
|
|
156
|
+
#0d9488 is 1.55:1, under the 3:1 mark floor, and the closer panel is where the
|
|
157
|
+
pack puts its final CTA. So the accent slab re-declares the ring in the pack's
|
|
158
|
+
own paper — #fff7f3 on #0d9488 is 3.54:1, over the floor. Found by a blind
|
|
159
|
+
read of the shipped pack, not by a gate: a token that resolves is a token the
|
|
160
|
+
gates accept, whatever it resolves to underneath. */
|
|
161
|
+
--focus-color-on-accent: var(--bg);
|
|
155
162
|
|
|
156
163
|
/* ---- Radii: a 10px hand, a 24px card, a 32px panel ------------------- */
|
|
157
164
|
/* MEASURED. The control is the se-uikit's own 10px on every button and
|
|
@@ -284,6 +291,13 @@ b {
|
|
|
284
291
|
font-weight: var(--weight-heading);
|
|
285
292
|
}
|
|
286
293
|
|
|
294
|
+
/* The closer panel is the pack's only saturated surface, and the only place the ink
|
|
295
|
+
ring cannot be seen. It is a SURFACE variant, not a theme: nothing else changes. */
|
|
296
|
+
[data-surface="accent"] {
|
|
297
|
+
background-color: var(--accent);
|
|
298
|
+
--focus-color: var(--focus-color-on-accent);
|
|
299
|
+
}
|
|
300
|
+
|
|
287
301
|
/* ── components ── */
|
|
288
302
|
/* Everything below consumes tokens only. The pack's rules in one place: the
|
|
289
303
|
page is flat — elevation is a tint, the one shadow belongs to the detached
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sheleg-design-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.58.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 thirty-nine locked style packs with ready-made design tokens — 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"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"node": ">=16"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"test": "python3 test/validate.py && python3 test/validate_palette.py && python3 test/sloplint.py && node --check bin/cli.js && node test/installer_test.js && npm run selftest",
|
|
22
|
+
"test": "python3 test/validate.py && python3 test/validate_palette.py && python3 test/sloplint.py && python3 tools/chrome.py && node --check bin/cli.js && node test/installer_test.js && npm run selftest",
|
|
23
23
|
"validate": "python3 test/validate.py && python3 test/validate_palette.py && python3 test/sloplint.py",
|
|
24
24
|
"smoke": "node bin/cli.js --help",
|
|
25
25
|
"palette": "python3 test/validate_palette.py",
|
|
@@ -27,7 +27,9 @@
|
|
|
27
27
|
"gen-descriptions": "python3 scripts/gen_manifest_descriptions.py --write",
|
|
28
28
|
"gen-contents": "python3 scripts/gen_contents.py --write",
|
|
29
29
|
"sloplint": "python3 test/sloplint.py",
|
|
30
|
-
"selftest": "python3 test/validate.py --self-test && python3 test/validate_palette.py --self-test && python3 test/sloplint.py --self-test"
|
|
30
|
+
"selftest": "python3 test/validate.py --self-test && python3 test/validate_palette.py --self-test && python3 test/sloplint.py --self-test",
|
|
31
|
+
"site": "python3 tools/site.py --out _site",
|
|
32
|
+
"chrome": "python3 tools/chrome.py"
|
|
31
33
|
},
|
|
32
34
|
"keywords": [
|
|
33
35
|
"skill",
|
|
@@ -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 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.",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.58.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "ssheleg",
|
|
8
8
|
"url": "https://x.com/sshlg93"
|
|
@@ -353,10 +353,14 @@ parallax and `animation-timeline`; it keeps a sticky nav, which is the only diff
|
|
|
353
353
|
**Four more standalone packs pin their own, and each states it in its own Register:**
|
|
354
354
|
`ora` at **4**, `tenor` at **4**, `paperclip` at **5** — the last one higher because it
|
|
355
355
|
is the only pack in the family that spends a native scroll-driven parallax —
|
|
356
|
-
and `bulletin` at **3**,
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
356
|
+
and `bulletin` at **3**, because its whole measured motion budget is an entrance
|
|
357
|
+
fade, a 0.12s press and a 0.3s hover. Its depth is drawn as a hard ink offset
|
|
358
|
+
rather than animated, and animating that offset is precisely what flattens it.
|
|
359
|
+
**The lowest ceiling in the library is 2**, and four of them pin it. This sentence
|
|
360
|
+
called `bulletin` the lowest for four releases while two others already sat under
|
|
361
|
+
it, which is why the number is now derived: `validate_motion_ceiling_floor()`
|
|
362
|
+
recomputes the minimum from the packs' own Register lines and fails when this
|
|
363
|
+
paragraph disagrees with them.
|
|
360
364
|
`field-notes` is standalone **by default** and may opt into the cinematic layer — it carries a `## Motion flavor` section saying
|
|
361
365
|
how — so it is the one standalone pack without a hard ceiling. Read that
|
|
362
366
|
section before turning the dial up on it.
|
|
@@ -4,7 +4,7 @@ description: Use when deciding how something LOOKS or MOVES — cinematic landin
|
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Optional siblings — dataviz, shadcn, migrate-radix-to-base; each has an in-text fallback when absent.
|
|
6
6
|
metadata:
|
|
7
|
-
version: 1.
|
|
7
|
+
version: 1.58.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# SHELEG Design
|
|
@@ -26,7 +26,7 @@ it.
|
|
|
26
26
|
|
|
27
27
|
Contract: widened — all thirteen headings.
|
|
28
28
|
|
|
29
|
-
Themes: light only — the dark slab is a SURFACE variant (`.chorus-slab`), not a theme twin; the page never inverts.
|
|
29
|
+
Themes: light only — the dark slab is a SURFACE variant (`[data-surface="slab"]`, with `.chorus-slab` as its class alias), not a theme twin; the page never inverts.
|
|
30
30
|
Rank: unordered — 3 status role(s) and no severity ramp; a rank scale is yours.
|
|
31
31
|
|
|
32
32
|
## Contents
|
|
@@ -101,11 +101,13 @@ already talking. If the quoted words belong to your product, go there.
|
|
|
101
101
|
Every value below is in
|
|
102
102
|
[`tokens/chorus.css`](./tokens/chorus.css), which is the single home; this table
|
|
103
103
|
documents roles. Provenance is marked per value in the token layer as MEASURED,
|
|
104
|
-
|
|
104
|
+
DERIVED or PACK DECISION. There is no SELECTED family here — the reference offers
|
|
105
|
+
no darker step of its own in any hue that fails, so every correction had to be
|
|
106
|
+
derived rather than promoted, which is the opposite of `surveyor`.
|
|
105
107
|
|
|
106
108
|
| Token | Value | Role and the number that licenses it |
|
|
107
109
|
|---|---|---|
|
|
108
|
-
| `--bg` | `#fbfaf9` | The field. 16.99M px² of the census, the largest painted area
|
|
110
|
+
| `--bg` | `#fbfaf9` | The field. 16.99M px² of the census, 2.8× the next-largest painted area. |
|
|
109
111
|
| `--surface` | `#ffffff` | Every card — 1.04:1 on `--bg`, which is the reference's entire card separation and the pack's first correction (see `--line`). |
|
|
110
112
|
| `--paper` | `#faf8f0` | The cream well that holds a demo, and the 1050×682 hero deck. 1.06:1 on `--surface`. |
|
|
111
113
|
| `--paper-deep` | `#f5f2e6` | The tinted 67px row. |
|
|
@@ -177,7 +179,7 @@ Three faces, and the display face has one job the others cannot take.
|
|
|
177
179
|
| Body | `--font-sans` | 16px · 1.7 · 400, and the same size at 500 for emphasis |
|
|
178
180
|
| Label | `--font-sans` | 14px · 1.4 · 400 or 500 |
|
|
179
181
|
| Micro | `--font-sans` | 12px · 1.333 · 500 |
|
|
180
|
-
| Eyebrow | `--font-mono` (DM Mono) | 13px · 1 · 500 · uppercase |
|
|
182
|
+
| Eyebrow, mono | `--font-mono` (DM Mono) | 13px · 1 · 500 · uppercase — the section label over a heading, and nothing else |
|
|
181
183
|
|
|
182
184
|
**The display face carries the stranger's words.** Outfit sets exactly two things
|
|
183
185
|
in the census: the hero, and the question inside every cut-corner bubble. Inter
|
|
@@ -245,14 +247,14 @@ failure; the pack keeps the value steps and adds `--line` to the card.
|
|
|
245
247
|
| Primary button | `--on-coral` at 6.20:1 on `--coral` | `--coral` | `--r-control` | 36px tall, 8px/16px padding, 14px/500 label |
|
|
246
248
|
| Secondary button | `--on-slab` at 16.54:1 on `--slab` | `--ink-strong` | `--r-control` | same metrics |
|
|
247
249
|
| Tertiary button | `--ink-strong` at 17.59:1 on `--surface` | `--surface` | `--r-control` | 1px `--line`; icon in `--coral` |
|
|
248
|
-
| Eyebrow chip | `--ink-body` at 9.15:1 on `--surface` | `--surface` | `--r-chip` | 1px `--line`, 8px/10px padding, 14px/500 |
|
|
250
|
+
| Eyebrow chip | `--ink-body` at 9.15:1 on `--surface` | `--surface` | `--r-chip` | 1px `--line`, 8px/10px padding, 14px/500 in `--font-sans` — it is not the mono eyebrow |
|
|
249
251
|
| Nav item | `--ink-muted` at 5.36:1 on `--bg` | transparent | `--r-pill` | 6px/8px padding; hover fills `--line-quiet` |
|
|
250
252
|
| Card | `--ink-body` at 9.15:1 on `--surface` | `--surface` | `--r-card` | **32px padding and 32px internal gap, unchanged at 390**; 1px `--line` |
|
|
251
253
|
| Quote bubble | `--ink` at 18.88:1 on `--surface` | `--surface` | `--r-bubble` | 24px/600 in `--font-display`; `--shadow-bubble` |
|
|
252
254
|
| Dark bubble | `--on-slab` at 16.54:1 on `--slab` | `--slab` | `--r-bubble` | the same object on the dark side of a pair |
|
|
253
255
|
| Demo well | `--ink-body` at 8.61:1 on `--paper` | `--paper` | `--r-well` | sits inside a card, inset by the card's padding |
|
|
254
256
|
| Product well | `--on-slab` at 17.76:1 on `--well` | `--well` | `--r-well` | the dark screen inside a light card |
|
|
255
|
-
| Delta chip | its own solid, at the 4.5:1 body floor | `--good` or `--danger`
|
|
257
|
+
| Delta chip | its own solid, at the 4.5:1 body floor | `--good-weak` or `--danger-weak` | `--r-badge` | **arrow glyph and number, always both** |
|
|
256
258
|
| Metric chip (on slab) | `--good-on-dark` at 13.31:1 on `--slab` | `--slab-raised` | `--r-chip` | 12px/500 |
|
|
257
259
|
| Section slab | `--on-slab` at 16.54:1 on `--slab` | `--slab` | `--r-panel` | 30px inset from the viewport; re-declares `--focus-color` |
|
|
258
260
|
|
|
@@ -266,6 +268,14 @@ On the slab, `--focus-color` resolves to the paper token instead, because the in
|
|
|
266
268
|
ring would otherwise vanish — #1b181c on #1b181c is 1.00:1.
|
|
267
269
|
`--focus-color-on-dark` is 16.54:1 on `--slab`.
|
|
268
270
|
|
|
271
|
+
**The nesting rule has one stated exception, and it is measured.** A nested box
|
|
272
|
+
normally takes the outer radius minus its inset. A well does not: the reference
|
|
273
|
+
draws a 24px well inside a 12px card at 32px of padding, so the inner corner is
|
|
274
|
+
*rounder* than the outer one and the subtraction would yield a negative number.
|
|
275
|
+
That is the reference's own geometry rather than a slip — the well reads as a
|
|
276
|
+
separate object dropped into the card, which is the point of it — so `--r-well` is
|
|
277
|
+
a free value by exception, and it is the only one in the pack.
|
|
278
|
+
|
|
269
279
|
**Inputs.** The reference paints exactly one — a search field inside a demo well:
|
|
270
280
|
`--surface` at `--r-control`, 1px `--line`, a 16px/400 value in `--ink-body`, the
|
|
271
281
|
placeholder in `--ink-ghost`, a leading search glyph in `--ink-muted`, and a filled
|
|
@@ -299,17 +309,18 @@ frame:
|
|
|
299
309
|
|
|
300
310
|
1. A full-bleed `--slab` announcement strip at radius 0, 43px tall, 16px/400 in
|
|
301
311
|
`--on-slab`, one `--coral-hot` link at its end.
|
|
302
|
-
2.
|
|
303
|
-
from the frame rather than pinned to the viewport edge.
|
|
312
|
+
2. The floating navigation bar — `--surface`, `--r-panel`, `--shadow-nav`, inset
|
|
313
|
+
from the frame rather than pinned to the viewport edge. It is not a pill:
|
|
314
|
+
`--r-pill` belongs to the nav *items* inside it, and to the capsule scatter.
|
|
304
315
|
3. The display line, centred, in `--font-display` at 56px/600/−0.0625em, **with
|
|
305
316
|
platform marks set inline as words**: rounded-square logo chips sitting on the
|
|
306
317
|
baseline inside the sentence, at cap height. This is the hero's whole idea —
|
|
307
318
|
the brands doing the mentioning are typeset into the claim.
|
|
308
319
|
4. Behind it, pale routing lines in `--parchment` running from logo chips at the
|
|
309
320
|
frame's left and right edges toward the centre — a wiring diagram in
|
|
310
|
-
`--parchment` at 1.
|
|
321
|
+
`--parchment` at 1.14:1 on `--bg`, which is texture rather than a mark.
|
|
311
322
|
5. Two CTAs side by side — `--coral` first, `--ink-strong` second — then one
|
|
312
|
-
tertiary
|
|
323
|
+
tertiary button below at `--r-control`, then a **stack of offset cream cards** peeking from behind
|
|
313
324
|
one another under `--shadow-drift`.
|
|
314
325
|
|
|
315
326
|
The lede is 18px/400 in `--ink-body`, two lines, centred, and never wider than the
|
|
@@ -317,8 +328,10 @@ The lede is 18px/400 in `--ink-body`, two lines, centred, and never wider than t
|
|
|
317
328
|
|
|
318
329
|
## Responsive
|
|
319
330
|
|
|
320
|
-
One breakpoint does the work
|
|
321
|
-
|
|
331
|
+
One breakpoint does the work, and it sits **above** 768: 390 and 768 take the same
|
|
332
|
+
narrow branch — same display size, same section head, same card padding — and 1440
|
|
333
|
+
is the only width that differs from them. What separates 390 from 768 is the frame
|
|
334
|
+
alone.
|
|
322
335
|
|
|
323
336
|
| | 390 | 768 | 1440 |
|
|
324
337
|
|---|---|---|---|
|
|
@@ -384,8 +397,10 @@ animations.
|
|
|
384
397
|
motion over the doctrine's ceiling; `--dur-state` carries hover instead, on the
|
|
385
398
|
measured curve.
|
|
386
399
|
|
|
387
|
-
Nothing lifts
|
|
388
|
-
|
|
400
|
+
Nothing lifts or scales **under interaction** — no hover lift, no press scale, no
|
|
401
|
+
parallax. The one lift in the pack is the entrance above, which is a mount and
|
|
402
|
+
fires once. There is no scroll clock: no `animation-timeline`, no scroll-linked
|
|
403
|
+
transform, and one sticky element.
|
|
389
404
|
|
|
390
405
|
## Signature motifs
|
|
391
406
|
|
|
@@ -448,7 +463,8 @@ page has no stranger's words to put in it, the page does not want this pack.
|
|
|
448
463
|
- **No italic anywhere** — the corpus has none, and `em, i` is pinned in the token
|
|
449
464
|
layer.
|
|
450
465
|
- **Nothing above weight 700**, and 700 only inside a running line.
|
|
451
|
-
- **No lift, scale or parallax**, and no scroll clock.
|
|
466
|
+
- **No lift, scale or parallax under interaction**, and no scroll clock. The
|
|
467
|
+
entrance's single lift is the stated exception, and it fires once on mount.
|
|
452
468
|
- **No second accent hue.** The periwinkle is a gradient stop and a dark-surface
|
|
453
469
|
series line; promoting it to a second button colour makes a different pack.
|
|
454
470
|
- **No tightening of display tracking at narrow widths.** It relaxes; that is
|
|
@@ -361,6 +361,13 @@ a page with two closers, or a closer that drops to body-size copy (white on
|
|
|
361
361
|
- **Card hover: nothing. Portrait hover: nothing.** The survey does not fidget.
|
|
362
362
|
- `@media (hover: hover)` gates the two hovers above.
|
|
363
363
|
|
|
364
|
+
**The ring on the closer panel is a second token, and it has to be.** `--focus-color`
|
|
365
|
+
is `--action`, which is correct everywhere the pack is paper — and invisible on the
|
|
366
|
+
one surface the pack fills with `--accent`: 1.55:1, under the 3:1 mark floor. The
|
|
367
|
+
closer is where the final CTA lives, so `[data-surface="accent"]` re-declares the
|
|
368
|
+
ring as `--focus-color-on-accent`, which is the pack's own `--bg` at 3.54:1 on the
|
|
369
|
+
accent. Nothing else about that surface changes.
|
|
370
|
+
|
|
364
371
|
## Bans
|
|
365
372
|
|
|
366
373
|
- **No shadow on anything but the detached nav.** `#ffffff` cards on `#fff7f3`
|
|
@@ -39,10 +39,16 @@
|
|
|
39
39
|
|
|
40
40
|
MEASURED — the literal was computed on the live page or read from an authored
|
|
41
41
|
Framer token that the census confirmed paints.
|
|
42
|
-
SELECTED — a value the reference ships in another role, taken because a floor
|
|
43
|
-
forces the move; only the role changes.
|
|
44
42
|
DERIVED — computed from a token here because the reference's own value fails a
|
|
45
43
|
floor. Hue is held; lightness moves and chroma is clipped to gamut.
|
|
44
|
+
PACK DECISION — a value the reference does not carry at all, so there was
|
|
45
|
+
nothing to measure. Two of them, and both are named where they sit: the
|
|
46
|
+
mirrored cut corner, which the reference ships in one direction only, and the
|
|
47
|
+
state clock, because the reference's controls compute to 0s.
|
|
48
|
+
|
|
49
|
+
There is no SELECTED family here. The reference offers no darker step of its own
|
|
50
|
+
in any hue that fails, so every correction below had to be DERIVED — which is
|
|
51
|
+
the opposite of `surveyor`, whose whole remedy was its reference's own ladder.
|
|
46
52
|
|
|
47
53
|
The corrections are in the pack's Gotchas, and there are six. */
|
|
48
54
|
|
|
@@ -150,6 +156,13 @@
|
|
|
150
156
|
--danger: #d03950;
|
|
151
157
|
--info: #1167f4;
|
|
152
158
|
--on-status: #ffffff; /* 4.84:1 on --good, 4.79:1 on --danger, 4.92:1 on --info */
|
|
159
|
+
/* The delta chip's ground. The reference paints its rose at two alphas over the
|
|
160
|
+
field (10% and 15%); the green wash is the same construction at the same
|
|
161
|
+
alpha, which is a PACK DECISION stated rather than a measurement implied.
|
|
162
|
+
@role non-text: --good-weak, --danger-weak — a tint under a figure that
|
|
163
|
+
carries its own solid; nothing is written ON them. */
|
|
164
|
+
--good-weak: rgba(25, 132, 0, 0.1);
|
|
165
|
+
--danger-weak: rgba(208, 57, 80, 0.1);
|
|
153
166
|
|
|
154
167
|
/* ---- Status on the slab: a separate ladder, and the mint lives only here */
|
|
155
168
|
/* MEASURED on the dark wells. The mint is the identity of the reading — 36
|
|
@@ -215,7 +228,10 @@
|
|
|
215
228
|
--focus-w: 2px;
|
|
216
229
|
--focus-offset: 2px;
|
|
217
230
|
--focus-color: var(--ink-strong);
|
|
218
|
-
|
|
231
|
+
/* It points at the ink token rather than at --paper: a ring on the dark IS ink,
|
|
232
|
+
and two names for one value is what this file's own coral comment argues
|
|
233
|
+
against. The ratio it has to clear is the one --on-slab already states. */
|
|
234
|
+
--focus-color-on-dark: var(--on-slab);
|
|
219
235
|
|
|
220
236
|
/* ---- Radii: a measured ladder, and one corner that is not there -------- */
|
|
221
237
|
/* MEASURED across the census: 8px on a badge, 10px on a chip and eyebrow, 12px
|
|
@@ -240,8 +256,13 @@
|
|
|
240
256
|
--r-bubble: 24px 0 24px 24px;
|
|
241
257
|
--r-bubble-mirror: 0 24px 24px 24px;
|
|
242
258
|
|
|
243
|
-
/* ---- Spacing:
|
|
244
|
-
/*
|
|
259
|
+
/* ---- Spacing: the measured steps, named by their step number ---------- */
|
|
260
|
+
/* The suffix is the ladder's INDEX, not the value in quarters — `--space-10`
|
|
261
|
+
is the tenth step and it is 32px. That is worth stating because the values
|
|
262
|
+
are the reference's own measured gaps (4, 6, 8, 10, 12, 16, 24, 32, 40, 100)
|
|
263
|
+
and two of them are not multiples of four, so no arithmetic reading of the
|
|
264
|
+
name survives contact with the ladder. Read the comment, not the number.
|
|
265
|
+
MEASURED. The card's padding is 32px and its internal gap is 32px, and
|
|
245
266
|
NEITHER CHANGES at 390 — the card keeps desktop padding on a 350px sheet,
|
|
246
267
|
which is a deliberate property of the reference and is stated in Responsive.
|
|
247
268
|
The section rhythm is 100px at desktop. */
|
|
@@ -310,6 +331,9 @@
|
|
|
310
331
|
--track-display: -0.0625em; /* MEASURED — -3.5px at 56px */
|
|
311
332
|
--track-display-sm: -0.025em; /* MEASURED — -1px at 40px; it RELAXES */
|
|
312
333
|
--track-h2: -0.032em; /* MEASURED — -1.4px at 44px */
|
|
334
|
+
--track-h2-sm: -0.025em; /* MEASURED — -1px at 34px, the narrow section head.
|
|
335
|
+
It exists because the Responsive table asks for it: a size step with no
|
|
336
|
+
tracking token forces the literal this library bans everywhere else. */
|
|
313
337
|
--track-quote: -0.02em; /* MEASURED — -0.48px at 24px */
|
|
314
338
|
|
|
315
339
|
--weight-body: 400;
|
|
@@ -339,11 +363,21 @@
|
|
|
339
363
|
line-height: var(--lh-body);
|
|
340
364
|
}
|
|
341
365
|
|
|
342
|
-
/* The slab is a surface, not a theme — the page never inverts.
|
|
343
|
-
|
|
344
|
-
|
|
366
|
+
/* The slab is a surface, not a theme — the page never inverts. The hook is the
|
|
367
|
+
library's own `[data-surface]`, unprefixed: every other surface-variant pack in
|
|
368
|
+
this collection uses that attribute, and the index's selection protocol says to
|
|
369
|
+
compare candidates by changing the token layer alone. A namespaced hook would
|
|
370
|
+
have made chorus the one pack you cannot A/B without editing the markup, which
|
|
371
|
+
is a cost paid by every reader to buy nothing. `.chorus-slab` is kept beside it
|
|
372
|
+
as an alias, because a class is what a component library reaches for.
|
|
373
|
+
|
|
374
|
+
What the block owes is every token that would otherwise resolve to a light-field
|
|
375
|
+
value on a dark ground. There are SIX, and the count is stated because the first
|
|
376
|
+
version of this block listed two, changed five, and left the sixth — --on-status
|
|
377
|
+
— at its root white, which put white on the mint at 1.32:1 inside the one
|
|
378
|
+
surface the pack invented the mint for. */
|
|
345
379
|
.chorus-slab,
|
|
346
|
-
[data-
|
|
380
|
+
[data-surface="slab"] {
|
|
347
381
|
background-color: var(--slab);
|
|
348
382
|
color: var(--on-slab);
|
|
349
383
|
--focus-color: var(--focus-color-on-dark);
|
|
@@ -351,6 +385,24 @@
|
|
|
351
385
|
--good: var(--good-on-dark);
|
|
352
386
|
--danger: var(--danger-on-dark);
|
|
353
387
|
--info: var(--info-on-dark);
|
|
388
|
+
/* The sixth. On the on-dark ladder the label is INK, not white: --slab on the
|
|
389
|
+
mint is 13.31:1, on the rose 6.01:1, on the periwinkle 7.40:1. White on those
|
|
390
|
+
three is 1.32:1, 2.93:1 and 2.38:1 — the first of them invisible. */
|
|
391
|
+
--on-status: var(--slab);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/* Custom properties inherit, and a slab is a section rather than a leaf: a white
|
|
395
|
+
card placed inside one would take the slab's white hairline and its mint, which
|
|
396
|
+
is the pack's own ban ("No mint on paper") arriving by inheritance. A light
|
|
397
|
+
surface nested in a slab therefore takes its tokens back. */
|
|
398
|
+
.chorus-slab :is(.ch-card, .ch-well--paper, [data-surface="paper"]),
|
|
399
|
+
[data-surface="slab"] :is(.ch-card, .ch-well--paper, [data-surface="paper"]) {
|
|
400
|
+
--focus-color: var(--ink-strong);
|
|
401
|
+
--line: rgba(70, 72, 77, 0.12);
|
|
402
|
+
--good: #198400;
|
|
403
|
+
--danger: #d03950;
|
|
404
|
+
--info: #1167f4;
|
|
405
|
+
--on-status: #ffffff;
|
|
354
406
|
}
|
|
355
407
|
|
|
356
408
|
/* The reference ships ZERO prefers-reduced-motion rules across 274KB. This block
|
|
@@ -152,6 +152,13 @@
|
|
|
152
152
|
--focus-w: 2px;
|
|
153
153
|
--focus-offset: 2px;
|
|
154
154
|
--focus-color: var(--action);
|
|
155
|
+
/* The ring VANISHES on the one surface the pack fills with --accent: #0a7269 on
|
|
156
|
+
#0d9488 is 1.55:1, under the 3:1 mark floor, and the closer panel is where the
|
|
157
|
+
pack puts its final CTA. So the accent slab re-declares the ring in the pack's
|
|
158
|
+
own paper — #fff7f3 on #0d9488 is 3.54:1, over the floor. Found by a blind
|
|
159
|
+
read of the shipped pack, not by a gate: a token that resolves is a token the
|
|
160
|
+
gates accept, whatever it resolves to underneath. */
|
|
161
|
+
--focus-color-on-accent: var(--bg);
|
|
155
162
|
|
|
156
163
|
/* ---- Radii: a 10px hand, a 24px card, a 32px panel ------------------- */
|
|
157
164
|
/* MEASURED. The control is the se-uikit's own 10px on every button and
|
|
@@ -283,3 +290,10 @@ strong,
|
|
|
283
290
|
b {
|
|
284
291
|
font-weight: var(--weight-heading);
|
|
285
292
|
}
|
|
293
|
+
|
|
294
|
+
/* The closer panel is the pack's only saturated surface, and the only place the ink
|
|
295
|
+
ring cannot be seen. It is a SURFACE variant, not a theme: nothing else changes. */
|
|
296
|
+
[data-surface="accent"] {
|
|
297
|
+
background-color: var(--accent);
|
|
298
|
+
--focus-color: var(--focus-color-on-accent);
|
|
299
|
+
}
|