sheleg-design-skill 0.3.0 → 0.6.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/README.md +8 -13
- package/bin/cli.js +26 -6
- package/cursor/rules/sheleg-design.mdc +7 -3
- package/package.json +2 -2
- package/plugins/sheleg-design/.claude-plugin/plugin.json +2 -2
- package/plugins/sheleg-design/commands/sheleg-design.md +3 -1
- package/plugins/sheleg-design/skills/sheleg-design/SKILL.md +28 -4
- package/plugins/sheleg-design/skills/sheleg-design/styles/editorial-luxury.md +116 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/instrument-console.md +104 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/editorial-luxury.css +53 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/instrument-console.css +43 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/workbench.css +58 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/workbench.md +122 -0
package/README.md
CHANGED
|
@@ -84,11 +84,19 @@ curl -fsSL https://raw.githubusercontent.com/ssheleg/sheleg-design-skill/main/in
|
|
|
84
84
|
|---|---|
|
|
85
85
|
| `SKILL.md` | Agent-facing skill: discovery trigger, the principles, how to apply them, quick-reference rules, common mistakes |
|
|
86
86
|
| `SHELEG_DESIGN.md` | The full reference: architecture, layer-by-layer mechanics with code, the exact morph math, the DOM↔WebGL projection bridge, a build-from-scratch recipe, and the "why it works" |
|
|
87
|
+
| `styles/*.md` | Style packs — the visual identity layer: `instrument-console` (near-black console, electric-blue signal), `editorial-luxury` (warm cream/espresso/sage, dossier motifs), and `workbench` (quiet light/dark product UI for dashboards & tools, standalone). Each locks palette, type, texture, motion tokens, motifs, and bans; the pack contract lets you author new styles |
|
|
87
88
|
|
|
88
89
|
After installing, a Cursor or Claude agent in that project can discover the
|
|
89
90
|
skill and use it when you ask it to build or upgrade a cinematic,
|
|
90
91
|
scroll-driven, particle-backed page.
|
|
91
92
|
|
|
93
|
+
## Style-agnostic motion, pluggable identity
|
|
94
|
+
|
|
95
|
+
The motion methodology (one clock, layered responses, degrade-to-calm) is
|
|
96
|
+
independent of the visual style. The look comes from a **style pack** the
|
|
97
|
+
agent picks per project — dark instrument console or warm editorial luxury
|
|
98
|
+
out of the box, or a new pack authored against the same contract.
|
|
99
|
+
|
|
92
100
|
## Stack-agnostic
|
|
93
101
|
|
|
94
102
|
The skill teaches **principles and architecture**, not a fixed dependency set.
|
|
@@ -109,19 +117,6 @@ test on every push and PR. Versioning is semver; bump `marketplace.json` +
|
|
|
109
117
|
`plugin.json` + `package.json` + `CHANGELOG.md` together — the validator
|
|
110
118
|
enforces the sync.
|
|
111
119
|
|
|
112
|
-
## По-русски (коротко)
|
|
113
|
-
|
|
114
|
-
SHELEG Design — методология кинематографичных скролл-лендингов: один
|
|
115
|
-
scroll-«клок» питает много дешёвых независимых слоёв (WebGL-частицы,
|
|
116
|
-
2D-фоллбек, параллакс, scrub-инструменты, прогресс-рейл), каждый деградирует
|
|
117
|
-
до спокойной статики. Ничего не кроссфейдится — формации «передислоцируются».
|
|
118
|
-
Установка: `npx sheleg-design-skill` (авто-детект `.cursor`/`.claude`), либо
|
|
119
|
-
плагин Claude Code — `/plugin marketplace add ssheleg/sheleg-design-skill`,
|
|
120
|
-
затем `/plugin install sheleg-design@sheleg-design-skill` (даст команду
|
|
121
|
-
`/sheleg-design`). Агент получает SKILL.md (принципы и порядок работы) и
|
|
122
|
-
SHELEG_DESIGN.md (полный референс: архитектура, точная математика морфа,
|
|
123
|
-
DOM↔WebGL-мост, рецепт сборки с нуля).
|
|
124
|
-
|
|
125
120
|
## License
|
|
126
121
|
|
|
127
122
|
MIT © ssheleg
|
package/bin/cli.js
CHANGED
|
@@ -23,7 +23,22 @@ const SKILL_DIR = path.join(
|
|
|
23
23
|
"sheleg-design",
|
|
24
24
|
);
|
|
25
25
|
const SKILL_SLUG = "sheleg-design";
|
|
26
|
-
const
|
|
26
|
+
const CORE_FILES = ["SKILL.md", "SHELEG_DESIGN.md"];
|
|
27
|
+
|
|
28
|
+
// The bundle is everything under skill/ — walked at runtime so adding a
|
|
29
|
+
// style pack or token file never requires touching the installer.
|
|
30
|
+
function listBundleFiles() {
|
|
31
|
+
const out = [];
|
|
32
|
+
const walk = (dir, prefix) => {
|
|
33
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
34
|
+
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
35
|
+
if (entry.isDirectory()) walk(path.join(dir, entry.name), rel);
|
|
36
|
+
else out.push(rel);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
walk(SKILL_DIR, "");
|
|
40
|
+
return out.sort();
|
|
41
|
+
}
|
|
27
42
|
|
|
28
43
|
const pkg = require(path.join(__dirname, "..", "package.json"));
|
|
29
44
|
|
|
@@ -86,6 +101,7 @@ ${c("bold", "Default")}
|
|
|
86
101
|
${c("bold", "What it installs")}
|
|
87
102
|
SKILL.md the agent-facing skill (discovery + principles)
|
|
88
103
|
SHELEG_DESIGN.md the full reference (architecture, recipes, why it works)
|
|
104
|
+
styles/*.md style packs (instrument-console, editorial-luxury)
|
|
89
105
|
`);
|
|
90
106
|
}
|
|
91
107
|
|
|
@@ -119,7 +135,7 @@ function main() {
|
|
|
119
135
|
const targetDir = resolveTargetDir(opts, cwd);
|
|
120
136
|
|
|
121
137
|
// Verify the bundle is intact before touching the filesystem.
|
|
122
|
-
for (const f of
|
|
138
|
+
for (const f of CORE_FILES) {
|
|
123
139
|
if (!fs.existsSync(path.join(SKILL_DIR, f))) {
|
|
124
140
|
console.error(
|
|
125
141
|
c("yellow", `Bundle is missing ${f}. This is a packaging bug.`),
|
|
@@ -128,7 +144,8 @@ function main() {
|
|
|
128
144
|
}
|
|
129
145
|
}
|
|
130
146
|
|
|
131
|
-
const
|
|
147
|
+
const files = listBundleFiles();
|
|
148
|
+
const existing = files.filter((f) =>
|
|
132
149
|
fs.existsSync(path.join(targetDir, f)),
|
|
133
150
|
);
|
|
134
151
|
if (existing.length && !opts.force) {
|
|
@@ -141,15 +158,18 @@ function main() {
|
|
|
141
158
|
}
|
|
142
159
|
|
|
143
160
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
144
|
-
for (const f of
|
|
145
|
-
|
|
161
|
+
for (const f of files) {
|
|
162
|
+
const dest = path.join(targetDir, f);
|
|
163
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
164
|
+
fs.copyFileSync(path.join(SKILL_DIR, f), dest);
|
|
146
165
|
}
|
|
147
166
|
|
|
148
167
|
const rel = path.relative(cwd, targetDir) || ".";
|
|
149
168
|
console.log(
|
|
150
169
|
`\n${c("green", "✓")} ${c("bold", "SHELEG Design")} installed to ${c("blue", rel + "/")}\n` +
|
|
151
170
|
` ${c("dim", "SKILL.md")} the agent skill\n` +
|
|
152
|
-
` ${c("dim", "SHELEG_DESIGN.md")} the full reference\n
|
|
171
|
+
` ${c("dim", "SHELEG_DESIGN.md")} the full reference\n` +
|
|
172
|
+
` ${c("dim", "styles/")} style packs (console / editorial)\n\n` +
|
|
153
173
|
`Your Cursor / Claude agent can now discover the skill and build\n` +
|
|
154
174
|
`cinematic, scroll-driven, particle-backed pages on its principles.\n\n` +
|
|
155
175
|
`${c("dim", "Docs: " + pkg.homepage)}\n`,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Apply SHELEG Design when building
|
|
2
|
+
description: Apply SHELEG Design when building a cinematic scroll-driven landing page, hero, or particle/WebGL scroll experience — or when styling product UI (dashboards, admin, internal tools) with its style packs
|
|
3
3
|
alwaysApply: false
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -8,8 +8,12 @@ alwaysApply: false
|
|
|
8
8
|
A page feels cinematic from a **single source of truth** (measured scroll
|
|
9
9
|
position) driving **many cheap, layered, independently-degradable responses** —
|
|
10
10
|
not from many animations. If the project has the full skill installed
|
|
11
|
-
(`.cursor/skills/sheleg-design/`), read its `SKILL.md
|
|
12
|
-
|
|
11
|
+
(`.cursor/skills/sheleg-design/`), read its `SKILL.md`, `SHELEG_DESIGN.md`,
|
|
12
|
+
and the chosen style pack in `styles/` first (instrument-console — dark
|
|
13
|
+
console; editorial-luxury — warm editorial; workbench — quiet light/dark
|
|
14
|
+
product UI for dashboards and tools, used standalone without the cinematic
|
|
15
|
+
motion layer); otherwise follow the contract below (self-contained on
|
|
16
|
+
purpose).
|
|
13
17
|
|
|
14
18
|
## Five principles, in order
|
|
15
19
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sheleg-design-skill",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "SHELEG Design — an agent skill for
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "SHELEG Design — an agent skill for cinematic scroll-driven landing pages AND product UI. Installs a SKILL.md + architecture reference + style packs (instrument-console dark, editorial-luxury warm, workbench light/dark for dashboards & tools) so Cursor/Claude agents build with a single-clock motion system and locked design tokens.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sheleg-design-skill": "bin/cli.js"
|
|
7
7
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sheleg-design",
|
|
3
|
-
"description": "SHELEG Design methodology
|
|
4
|
-
"version": "0.
|
|
3
|
+
"description": "SHELEG Design methodology: cinematic scroll-driven landing pages (single scroll clock, layered degrade-to-calm motion, WebGL particle formations) plus pluggable visual style packs — instrument-console (dark console), editorial-luxury (warm editorial), workbench (light/dark product UI for dashboards and tools). Ships the sheleg-design skill, the architecture reference, style packs with ready-made token CSS, and the /sheleg-design command.",
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "ssheleg"
|
|
7
7
|
},
|
|
@@ -8,6 +8,8 @@ Invoke the `sheleg-design` skill and apply it to the current request.
|
|
|
8
8
|
- Read the skill's SKILL.md, then its full reference `SHELEG_DESIGN.md`
|
|
9
9
|
(same directory) before designing anything.
|
|
10
10
|
- Task: $ARGUMENTS — if empty, ask what page or section to build/upgrade,
|
|
11
|
-
then proceed per the skill's "How to Apply" order.
|
|
11
|
+
then proceed per the skill's "How to Apply" order. If the arguments name
|
|
12
|
+
a style pack (instrument-console | editorial-luxury | workbench), use
|
|
13
|
+
that pack without re-asking; otherwise pick per the SKILL.md table.
|
|
12
14
|
- Follow the skill's non-negotiables (Quick Reference table) and ship every
|
|
13
15
|
layer's reduced-motion/fallback branch in the same commit.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sheleg-design
|
|
3
|
-
description: Use when building or upgrading a cinematic scroll-driven landing page, marketing site, or hero experience
|
|
3
|
+
description: Use when building or upgrading a cinematic scroll-driven landing page, marketing site, or hero experience (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, design tokens, light/dark themes. RU triggers - кинематографичный лендинг, скролл-анимация, лендинг с частицами, стиль дашборда, дизайн-токены, светлая/тёмная тема.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SHELEG Design
|
|
@@ -24,8 +24,11 @@ the DOM↔WebGL bridge, the build recipe (§11), and the file map.
|
|
|
24
24
|
- Scroll-linked charts, step flows, progress rails, parallax
|
|
25
25
|
- Existing scroll site that feels nervous, janky, or out of phase
|
|
26
26
|
|
|
27
|
-
**Not for:** docs, dashboards, static content sites — or
|
|
28
|
-
system or copy isn't finished yet.
|
|
27
|
+
**Not for (the motion layer):** docs, dashboards, static content sites — or
|
|
28
|
+
any page whose visual system or copy isn't finished yet. For dashboards,
|
|
29
|
+
tools, and product UI, use the [`workbench`](./styles/workbench.md) style
|
|
30
|
+
pack standalone: its tokens and atoms apply without the cinematic motion
|
|
31
|
+
layer.
|
|
29
32
|
|
|
30
33
|
## Core Pattern — five principles, in order
|
|
31
34
|
|
|
@@ -41,9 +44,30 @@ system or copy isn't finished yet. Fix those first; motion amplifies weakness.
|
|
|
41
44
|
5. **Degrade to calm.** Reduced-motion / coarse pointer / no-WebGL collapse to
|
|
42
45
|
a static, fully-legible page. The effect is a bonus, never a dependency.
|
|
43
46
|
|
|
47
|
+
## Style packs
|
|
48
|
+
|
|
49
|
+
The motion methodology is style-agnostic; the visual identity comes from a
|
|
50
|
+
style pack in [`styles/`](./styles/):
|
|
51
|
+
|
|
52
|
+
| Pack | Look | Choose for |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| [`instrument-console`](./styles/instrument-console.md) | near-black aerospace console, one electric-blue signal, mono telemetry | technical / systems / infra products |
|
|
55
|
+
| [`editorial-luxury`](./styles/editorial-luxury.md) | warm cream + espresso ink, sage accent, Fraunces/Newsreader, dossier motifs | editorial / research / premium B2B |
|
|
56
|
+
| [`workbench`](./styles/workbench.md) | quiet light/dark product UI: neutral grays, borders as elevation, one blue accent, mono data | dashboards / admin / internal & dev tools (standalone — no cinematic motion) |
|
|
57
|
+
|
|
58
|
+
Read the chosen pack in full before styling anything — it supplies the
|
|
59
|
+
palette, type, texture, motion-token values, signature motifs, and bans.
|
|
60
|
+
Each pack ships a ready-made token layer in `styles/tokens/<pack>.css` —
|
|
61
|
+
copy that file verbatim instead of transcribing tables. For a new style,
|
|
62
|
+
author a new pack file with the same headings (Register / Palette / Type /
|
|
63
|
+
Texture & surface / Motion tokens / Signature motifs / Micro-interactions /
|
|
64
|
+
Bans; skeleton: `templates/style-pack-template.md` in the repo) plus its
|
|
65
|
+
`tokens/<pack>.css`; never invent token values ad hoc.
|
|
66
|
+
|
|
44
67
|
## How to Apply
|
|
45
68
|
|
|
46
|
-
1. Visual system first (
|
|
69
|
+
1. Visual system first: pick (or author) a style pack, apply its tokens as
|
|
70
|
+
the site-wide design tokens (color, type, spacing, components).
|
|
47
71
|
2. Build bottom-up in the §11 layer order: scroll clock → smooth scroll →
|
|
48
72
|
particle field → 2D fallback → DOM choreography → reveals → scrubbed
|
|
49
73
|
instruments → optional DOM↔WebGL bridge. One small file per layer.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Style pack — Editorial Luxury
|
|
2
|
+
|
|
3
|
+
Origin: prowl.chat (production). Warm cream field, espresso ink, one
|
|
4
|
+
functional sage-green accent, terracotta as a rare editorial highlight,
|
|
5
|
+
classified-red reserved for negatives only. "Design *is* the product" on
|
|
6
|
+
public pages; quiet and fast inside the app. Dossier/editorial DNA:
|
|
7
|
+
hairline rules, eyebrow labels, stamp/seal motifs, mono data, authored
|
|
8
|
+
artifact previews instead of icon cards.
|
|
9
|
+
|
|
10
|
+
## Register
|
|
11
|
+
|
|
12
|
+
Choose this pack for warm, editorial, print-inspired products: research /
|
|
13
|
+
intelligence tools, content products, premium B2B. Two registers:
|
|
14
|
+
**brand** (landing, use-case, legal, shared pages — cinematic, editorial)
|
|
15
|
+
and **product** (authenticated app — quiet micro-interactions only, never
|
|
16
|
+
cinematic noise).
|
|
17
|
+
|
|
18
|
+
## Palette
|
|
19
|
+
|
|
20
|
+
Ready-made token layer: [`tokens/editorial-luxury.css`](./tokens/editorial-luxury.css)
|
|
21
|
+
— copy it verbatim instead of transcribing this table.
|
|
22
|
+
|
|
23
|
+
| Token | Value | Role |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `--paper` | `#fbf6ec` | primary cream field |
|
|
26
|
+
| `--paper-2` | `#f3ead9` | raised card on cream |
|
|
27
|
+
| `--paper-3` | `#ece0cb` | deeper inset |
|
|
28
|
+
| `--espresso` | `#1b150e` | dark section field |
|
|
29
|
+
| `--espresso-2` | `#241c12` | raised card on espresso |
|
|
30
|
+
| `--cream` | `#f4ecdc` | ink on espresso |
|
|
31
|
+
| `--ink` / `-soft` / `-faint` | `#241c14` / `#5b4f3d` / `#8a7c64` | text ramp on cream |
|
|
32
|
+
| `--accent` (sage) / `-deep` | `#3f7d5f` / `#2f5e47` | THE single functional accent (links, CTA, "signal") |
|
|
33
|
+
| `--terra` | `#b5623f` | rare editorial highlight only |
|
|
34
|
+
| `--red` | `#a83a2b` | negatives ONLY (comparison "without") |
|
|
35
|
+
| `--hair` / `-strong` | `rgba(36,28,20,0.13)` / `rgba(36,28,20,0.22)` | hairline rules |
|
|
36
|
+
|
|
37
|
+
Contrast: body on cream must clear 4.5:1 — `--ink` / `--ink-soft`, never
|
|
38
|
+
`--ink-faint` for sustained reading. On espresso, text is `--cream` and the
|
|
39
|
+
sage accent brightens to `#9fd9bc`.
|
|
40
|
+
|
|
41
|
+
## Type
|
|
42
|
+
|
|
43
|
+
- Display: **Fraunces** — oversized, optical, tracked `-0.02…-0.03em`, hero
|
|
44
|
+
ceiling ~7rem via clamp.
|
|
45
|
+
- Body: **Newsreader** — relaxed, measure ≤66ch.
|
|
46
|
+
- Mono: **JetBrains Mono** — eyebrows, labels, numbers, code, "signal" tags.
|
|
47
|
+
- Three families, no more; hierarchy through scale + weight.
|
|
48
|
+
|
|
49
|
+
## Texture & surface
|
|
50
|
+
|
|
51
|
+
- Fixed warm radial field + ~4% film-grain multiply overlay (cheap, no blur).
|
|
52
|
+
- Squircle radii 14 / 22 / 30px; double-bezel cards
|
|
53
|
+
(`inset 0 1px 0 rgba(255,251,242,0.7)` highlight).
|
|
54
|
+
- Soft ambient elevation only (`0 18px 50px -28px rgba(36,28,20,0.30)`
|
|
55
|
+
scale); no harsh dark drops, no outer glows on buttons.
|
|
56
|
+
|
|
57
|
+
## Motion tokens
|
|
58
|
+
|
|
59
|
+
- Ease `cubic-bezier(0.22, 1, 0.36, 1)` (ease-out-expo feel) — the one
|
|
60
|
+
site-wide curve for the SHELEG token set.
|
|
61
|
+
- Spring `cubic-bezier(0.32, 0.72, 0, 1)` — press/magnetic feedback only.
|
|
62
|
+
- Base duration `0.7s` for brand-register reveals; product register stays in
|
|
63
|
+
the SHELEG fast/base range (≤0.32s).
|
|
64
|
+
|
|
65
|
+
## Signature motifs
|
|
66
|
+
|
|
67
|
+
- A recurring sage **"signal"** motif travels the narrative: raw inputs →
|
|
68
|
+
pipeline → synthesized deliverable. One story, one color.
|
|
69
|
+
- **Authored artifact previews** instead of flat icon cards: composed mock
|
|
70
|
+
report/infographic/PDF/PPTX/video frames that assemble on scroll.
|
|
71
|
+
- Dossier primitives: `.dossier-card`, hairline `.rule`, `.eyebrow`,
|
|
72
|
+
`.stamp`, `.data-table`, tabular-nums data, footnote captions.
|
|
73
|
+
- Visualization rule (key contract): all data-viz animation is **CSS-driven
|
|
74
|
+
off a `.revealed` ancestor** (bars `scaleX/Y`, sparklines/donuts via
|
|
75
|
+
`stroke-dashoffset`) — identical in plain and cinematic reveal paths,
|
|
76
|
+
correct static final state under reduced-motion, **fail-open** if JS/CDN
|
|
77
|
+
dies (content always visible).
|
|
78
|
+
|
|
79
|
+
## Motion flavor
|
|
80
|
+
|
|
81
|
+
How this pack rides the SHELEG motion layer (brand register only):
|
|
82
|
+
|
|
83
|
+
- Reveals: 0.7s base with the pack ease; word-by-word title lighting and
|
|
84
|
+
`.reveal` sections; every reveal is fail-open (final state visible
|
|
85
|
+
without JS).
|
|
86
|
+
- The sage "signal" motif is the scroll narrative: it travels raw inputs →
|
|
87
|
+
pipeline → deliverable; scrubbed instruments draw with it.
|
|
88
|
+
- Particle field is optional here — if used, tint sage, low density, low
|
|
89
|
+
energy (≤0.6); artifact mock previews assembling on scroll are the
|
|
90
|
+
preferred spectacle.
|
|
91
|
+
- Product register: SHELEG fast/base durations only, no cinematic motion.
|
|
92
|
+
|
|
93
|
+
## Micro-interactions
|
|
94
|
+
|
|
95
|
+
- Buttons: tactile `translateY(-2px)` + spring; no glow.
|
|
96
|
+
- Magnetic primary CTAs and a small sage cursor-ring accent — desktop +
|
|
97
|
+
fine pointer only, gated with the SHELEG degrade rules.
|
|
98
|
+
- Focus-visible: 2px sage outline, offset 3px (brightened on espresso).
|
|
99
|
+
- Cards lift + border warms on hover; never nested-card-in-card.
|
|
100
|
+
|
|
101
|
+
## Bans
|
|
102
|
+
|
|
103
|
+
- No gradient text, no side-stripe accent borders, no glassmorphism, no
|
|
104
|
+
neon/outer-glow shadows, no purple.
|
|
105
|
+
- No emojis in product UI; no Inter/system display fonts (Fraunces owns
|
|
106
|
+
display).
|
|
107
|
+
- Never flatten the cream identity into generic white; never let motion
|
|
108
|
+
gate content visibility.
|
|
109
|
+
|
|
110
|
+
## Gotchas
|
|
111
|
+
|
|
112
|
+
- Token-first re-skin: override the token layer in `:root`, map legacy
|
|
113
|
+
token names onto it — do NOT restyle components one by one.
|
|
114
|
+
- After any theme/token migration, **sweep hardcoded literals** (hex/rgba
|
|
115
|
+
left in CSS/JS keep the old palette and read as inverted on the new
|
|
116
|
+
theme).
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Style pack — Instrument Console
|
|
2
|
+
|
|
3
|
+
Origin: Nicegram Business OS landing (the SHELEG reference implementation).
|
|
4
|
+
A near-black aerospace console: deep layered surfaces, hairline seams, one
|
|
5
|
+
electric-blue signal accent, mono telemetry labels. The particle field and
|
|
6
|
+
every instrument read as one precision device responding to the hand.
|
|
7
|
+
|
|
8
|
+
## Register
|
|
9
|
+
|
|
10
|
+
Choose this pack for technical, systems, infra, or "operating system"
|
|
11
|
+
products where the aesthetic is calm precision hardware. Single dark
|
|
12
|
+
register across landing and app; brightness (energy) varies per scene, hue
|
|
13
|
+
does not.
|
|
14
|
+
|
|
15
|
+
## Palette
|
|
16
|
+
|
|
17
|
+
Ready-made token layer: [`tokens/instrument-console.css`](./tokens/instrument-console.css)
|
|
18
|
+
— copy it verbatim instead of transcribing this table.
|
|
19
|
+
|
|
20
|
+
| Token | Value | Role |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `--base` | `#05070a` | page field (near-black) |
|
|
23
|
+
| `--surface-1/2/3` | `#0a0e14` / `#10151d` / `#161c26` | ascending raised panels |
|
|
24
|
+
| `--hairline` / `-strong` | `#1e2630` / `#2b3542` | panel seams, rules |
|
|
25
|
+
| `--ink` | `#eef2f7` | primary text |
|
|
26
|
+
| `--ink-muted` / `-faint` | `#9aa7b6` / `#5f6b7a` | secondary / captions |
|
|
27
|
+
| `--accent` | `#3392ff` | THE electric-blue signal (CTA, links, particles) |
|
|
28
|
+
| `--accent-dim` / `-bright` | `#1f5fb0` / `#6bb3ff` | pressed / highlighted signal |
|
|
29
|
+
| `--accent-glow` | `rgba(51,146,255,0.18)` | the only permitted glow |
|
|
30
|
+
| `--ok` / `--warn` | `#46d39a` / `#e0a030` | status semantics only |
|
|
31
|
+
|
|
32
|
+
The particle field, progress rail, and all instruments are tinted with
|
|
33
|
+
`--accent` only — energy per scene changes brightness, never hue.
|
|
34
|
+
|
|
35
|
+
## Type
|
|
36
|
+
|
|
37
|
+
- Display + body: **Geist Sans** (or an equivalent neutral grotesk) —
|
|
38
|
+
weight 600 headlines, clamp-scaled (hero ~5.25rem ceiling), tight but
|
|
39
|
+
not tracked-negative.
|
|
40
|
+
- Data: **Geist Mono** (or ui-monospace) — telemetry eyebrows, numeric
|
|
41
|
+
readouts, section indices ("02 / CONTROL"), code.
|
|
42
|
+
- Two families; mono is a signature, not a garnish — every label that
|
|
43
|
+
narrates system state is mono.
|
|
44
|
+
|
|
45
|
+
## Texture & surface
|
|
46
|
+
|
|
47
|
+
- Flat panels separated by 1px hairlines; radii 4 / 8 / 14px (+ pill) —
|
|
48
|
+
machined, not squircle.
|
|
49
|
+
- Elevation via surface steps (`--surface-1..3`), not shadows; the single
|
|
50
|
+
glow `0 0 0 1px rgba(51,146,255,0.4), 0 8px 30px rgba(51,146,255,0.18)`
|
|
51
|
+
is reserved for the active signal element.
|
|
52
|
+
- No grain, no blur; darkness itself is the texture.
|
|
53
|
+
|
|
54
|
+
## Motion tokens
|
|
55
|
+
|
|
56
|
+
- Ease `cubic-bezier(0.16, 1, 0.3, 1)` — the one site-wide curve
|
|
57
|
+
(the SHELEG default token set: 0.18 / 0.32 / 0.55 / 0.8s, stagger 0.07).
|
|
58
|
+
- Section rhythm `clamp(9rem, 24vh, 20rem)` vertical padding.
|
|
59
|
+
|
|
60
|
+
## Signature motifs
|
|
61
|
+
|
|
62
|
+
- WebGL particle formations as the narrative backdrop (SCENES registry),
|
|
63
|
+
electric-blue, hold-then-redeploy per the SHELEG core.
|
|
64
|
+
- Right-edge progress rail with act markers; nav act badge ("02 /
|
|
65
|
+
CONTROL") driven by the coarse store subscription.
|
|
66
|
+
- Frame/HUD chrome: thin viewport frame, corner ticks, scan/dim of
|
|
67
|
+
off-band sections (attention spotlight).
|
|
68
|
+
- Scrubbed SVG instruments (charts, step flows) drawn hairline-thin with
|
|
69
|
+
mono annotations.
|
|
70
|
+
|
|
71
|
+
## Motion flavor
|
|
72
|
+
|
|
73
|
+
How this pack rides the SHELEG motion layer:
|
|
74
|
+
|
|
75
|
+
- Particle field: single-hue `--accent` tint; SCENES `energy` 0.45–0.7,
|
|
76
|
+
climax only reaching 1.0; formations lean geometric (frame, lattice,
|
|
77
|
+
orbit, constellation, glyph).
|
|
78
|
+
- Reveal set: full act-themed range — Scatter (problem acts), Lock
|
|
79
|
+
(control/system acts), Clip (headlines/panels), Pulse (climax).
|
|
80
|
+
- Instruments: hairline-thin scrubbed SVG with mono annotations; progress
|
|
81
|
+
rail and act badge are first-class chrome.
|
|
82
|
+
|
|
83
|
+
## Micro-interactions
|
|
84
|
+
|
|
85
|
+
- Buttons: surface-step + accent fill on primary; press = 1 shade dimmer
|
|
86
|
+
(`--accent-dim`), no bounce.
|
|
87
|
+
- Reveal primitives themed per act: Scatter (drift+blur resolve), Lock
|
|
88
|
+
(snap into slot), Clip (mechanical wipe), Pulse (lock acquired).
|
|
89
|
+
- Focus-visible: 1px `--accent` ring + `--accent-glow` halo.
|
|
90
|
+
|
|
91
|
+
## Bans
|
|
92
|
+
|
|
93
|
+
- One accent hue — no second color except `--ok`/`--warn` status semantics.
|
|
94
|
+
- No gradient text, no glassmorphism/backdrop blur, no purple/neon
|
|
95
|
+
rainbow, no colored shadows besides `--accent-glow`.
|
|
96
|
+
- No light sections — contrast comes from surface steps, not inversion.
|
|
97
|
+
- No decorative serif/display fonts; the console voice is grotesk + mono.
|
|
98
|
+
|
|
99
|
+
## Gotchas
|
|
100
|
+
|
|
101
|
+
- Glow discipline: `--accent-glow` on more than one element per viewport
|
|
102
|
+
destroys the "single signal" read — the page becomes a christmas tree.
|
|
103
|
+
- Dark UIs hide low-contrast text: `--ink-faint` is for captions only,
|
|
104
|
+
never sustained reading (fails 4.5:1 on `--surface-1`).
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/* SHELEG Design — Editorial Luxury token layer (origin: prowl.chat).
|
|
2
|
+
Copy verbatim; consume only var(--…) in components.
|
|
3
|
+
After any theme migration, sweep hardcoded hex/rgba literals. */
|
|
4
|
+
:root {
|
|
5
|
+
--paper: #fbf6ec;
|
|
6
|
+
--paper-2: #f3ead9;
|
|
7
|
+
--paper-3: #ece0cb;
|
|
8
|
+
--espresso: #1b150e;
|
|
9
|
+
--espresso-2: #241c12;
|
|
10
|
+
--cream: #f4ecdc;
|
|
11
|
+
--ink: #241c14;
|
|
12
|
+
--ink-soft: #5b4f3d;
|
|
13
|
+
--ink-faint: #8a7c64;
|
|
14
|
+
--accent: #3f7d5f;
|
|
15
|
+
--accent-deep: #2f5e47;
|
|
16
|
+
--accent-dim: rgba(63, 125, 95, 0.12);
|
|
17
|
+
--accent-med: rgba(63, 125, 95, 0.34);
|
|
18
|
+
--accent-on-dark: #9fd9bc;
|
|
19
|
+
--terra: #b5623f;
|
|
20
|
+
--red: #a83a2b;
|
|
21
|
+
--hair: rgba(36, 28, 20, 0.13);
|
|
22
|
+
--hair-strong: rgba(36, 28, 20, 0.22);
|
|
23
|
+
|
|
24
|
+
--r: 14px;
|
|
25
|
+
--r-lg: 22px;
|
|
26
|
+
--r-xl: 30px;
|
|
27
|
+
|
|
28
|
+
--shadow-sm: 0 2px 10px -4px rgba(36, 28, 20, 0.16);
|
|
29
|
+
--shadow: 0 18px 50px -28px rgba(36, 28, 20, 0.3),
|
|
30
|
+
0 4px 14px -10px rgba(36, 28, 20, 0.18);
|
|
31
|
+
--shadow-lg: 0 36px 90px -44px rgba(36, 28, 20, 0.42),
|
|
32
|
+
0 8px 24px -16px rgba(36, 28, 20, 0.2);
|
|
33
|
+
--inset-hi: inset 0 1px 0 rgba(255, 251, 242, 0.7);
|
|
34
|
+
|
|
35
|
+
--motion-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
36
|
+
--spring: cubic-bezier(0.32, 0.72, 0, 1);
|
|
37
|
+
--dur-brand: 0.7s;
|
|
38
|
+
--dur-fast: 0.18s;
|
|
39
|
+
--dur-base: 0.32s;
|
|
40
|
+
--dur-slow: 0.55s;
|
|
41
|
+
--dur-epic: 0.8s;
|
|
42
|
+
--stagger: 0.07s;
|
|
43
|
+
|
|
44
|
+
--font-display: "Fraunces", Georgia, serif;
|
|
45
|
+
--font-body: "Newsreader", Georgia, serif;
|
|
46
|
+
--font-data: "JetBrains Mono", ui-monospace, monospace;
|
|
47
|
+
|
|
48
|
+
--grain-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
49
|
+
|
|
50
|
+
background-color: var(--paper);
|
|
51
|
+
color: var(--ink);
|
|
52
|
+
color-scheme: light;
|
|
53
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* SHELEG Design — Instrument Console token layer.
|
|
2
|
+
Copy verbatim; consume only var(--…) in components. */
|
|
3
|
+
:root {
|
|
4
|
+
--base: #05070a;
|
|
5
|
+
--surface-1: #0a0e14;
|
|
6
|
+
--surface-2: #10151d;
|
|
7
|
+
--surface-3: #161c26;
|
|
8
|
+
--hairline: #1e2630;
|
|
9
|
+
--hairline-strong: #2b3542;
|
|
10
|
+
--ink: #eef2f7;
|
|
11
|
+
--ink-muted: #9aa7b6;
|
|
12
|
+
--ink-faint: #5f6b7a;
|
|
13
|
+
--accent: #3392ff;
|
|
14
|
+
--accent-dim: #1f5fb0;
|
|
15
|
+
--accent-bright: #6bb3ff;
|
|
16
|
+
--accent-glow: rgba(51, 146, 255, 0.18);
|
|
17
|
+
--ok: #46d39a;
|
|
18
|
+
--warn: #e0a030;
|
|
19
|
+
|
|
20
|
+
--r-sm: 4px;
|
|
21
|
+
--r-md: 8px;
|
|
22
|
+
--r-lg: 14px;
|
|
23
|
+
--r-pill: 999px;
|
|
24
|
+
|
|
25
|
+
--signal-glow: 0 0 0 1px rgba(51, 146, 255, 0.4),
|
|
26
|
+
0 8px 30px rgba(51, 146, 255, 0.18);
|
|
27
|
+
|
|
28
|
+
--motion-ease: cubic-bezier(0.16, 1, 0.3, 1);
|
|
29
|
+
--dur-fast: 0.18s;
|
|
30
|
+
--dur-base: 0.32s;
|
|
31
|
+
--dur-slow: 0.55s;
|
|
32
|
+
--dur-epic: 0.8s;
|
|
33
|
+
--stagger: 0.07s;
|
|
34
|
+
|
|
35
|
+
--section: clamp(9rem, 24vh, 20rem);
|
|
36
|
+
|
|
37
|
+
--font-ui: var(--font-geist-sans, "Geist"), system-ui, sans-serif;
|
|
38
|
+
--font-data: var(--font-geist-mono, "Geist Mono"), ui-monospace, monospace;
|
|
39
|
+
|
|
40
|
+
background-color: var(--base);
|
|
41
|
+
color: var(--ink);
|
|
42
|
+
color-scheme: dark;
|
|
43
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/* SHELEG Design — Workbench token layer (light default + dark twin).
|
|
2
|
+
Copy verbatim; consume only var(--…) in components.
|
|
3
|
+
Theme switch: set data-theme="dark" on :root. */
|
|
4
|
+
:root {
|
|
5
|
+
--bg: #f7f8fa;
|
|
6
|
+
--panel: #ffffff;
|
|
7
|
+
--panel-2: #f7f8fa;
|
|
8
|
+
--ink: #1a1f2b;
|
|
9
|
+
--muted: #5b6472;
|
|
10
|
+
--border: #e6e9ef;
|
|
11
|
+
--border-strong: #d7dce4;
|
|
12
|
+
--accent: #2f6feb;
|
|
13
|
+
--accent-weak: #eaf0fe;
|
|
14
|
+
--ok: #1a7f37;
|
|
15
|
+
--ok-weak: #e6f4ea;
|
|
16
|
+
--warn: #9a6700;
|
|
17
|
+
--warn-weak: #fff3d6;
|
|
18
|
+
--danger: #d1242f;
|
|
19
|
+
--danger-weak: #fde8e9;
|
|
20
|
+
--info: #2f6feb;
|
|
21
|
+
--info-weak: #eaf0fe;
|
|
22
|
+
|
|
23
|
+
--r-control: 6px;
|
|
24
|
+
--r-card: 10px;
|
|
25
|
+
--r-pill: 999px;
|
|
26
|
+
|
|
27
|
+
--shadow-1: 0 4px 16px -8px rgba(26, 31, 43, 0.18); /* overlays only */
|
|
28
|
+
|
|
29
|
+
--dur-state: 0.18s; /* meaningful state transitions, ease-out */
|
|
30
|
+
--dur-hover: 0.12s; /* background/border/color only */
|
|
31
|
+
|
|
32
|
+
--font-ui: -apple-system, "SF Pro", "Segoe UI", sans-serif;
|
|
33
|
+
--font-data: ui-monospace, "SF Mono", Menlo, monospace;
|
|
34
|
+
|
|
35
|
+
background-color: var(--bg);
|
|
36
|
+
color: var(--ink);
|
|
37
|
+
color-scheme: light dark;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
:root[data-theme="dark"] {
|
|
41
|
+
--bg: #0f1218;
|
|
42
|
+
--panel: #161b24;
|
|
43
|
+
--panel-2: #1b212c;
|
|
44
|
+
--ink: #e8ecf3;
|
|
45
|
+
--muted: #8a93a6;
|
|
46
|
+
--border: #232a36;
|
|
47
|
+
--border-strong: #2c3441;
|
|
48
|
+
--accent: #4b8bff;
|
|
49
|
+
--accent-weak: #1b2740;
|
|
50
|
+
--ok: #3fb960;
|
|
51
|
+
--ok-weak: #12281a;
|
|
52
|
+
--warn: #d9a93f;
|
|
53
|
+
--warn-weak: #2b2210;
|
|
54
|
+
--danger: #e5534b;
|
|
55
|
+
--danger-weak: #2d1517;
|
|
56
|
+
--info: #4b8bff;
|
|
57
|
+
--info-weak: #1b2740;
|
|
58
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Style pack — Workbench
|
|
2
|
+
|
|
3
|
+
Origin: the Builder Pro AI production design system (light+dark token
|
|
4
|
+
layer) blended with GitHub-style border discipline and quiet stat-tile
|
|
5
|
+
surfaces. A calm, dense, utilitarian product UI: neutral grays, borders as
|
|
6
|
+
elevation, one functional blue accent, mono for data. Design serves the
|
|
7
|
+
product — never performs.
|
|
8
|
+
|
|
9
|
+
## Register
|
|
10
|
+
|
|
11
|
+
Choose this pack for **product surfaces**: dashboards, admin panels,
|
|
12
|
+
internal tools, dev tools, analytics, settings. This is the one pack meant
|
|
13
|
+
to be used **standalone** — the SHELEG cinematic motion layer is out of
|
|
14
|
+
scope here; motion is limited to meaningful 150–200ms state transitions.
|
|
15
|
+
Light is the default register; dark is a first-class twin, both from the
|
|
16
|
+
same tokens.
|
|
17
|
+
|
|
18
|
+
## Palette
|
|
19
|
+
|
|
20
|
+
Ready-made token layer: [`tokens/workbench.css`](./tokens/workbench.css)
|
|
21
|
+
(light `:root` + `data-theme="dark"` twin) — copy it verbatim instead of
|
|
22
|
+
transcribing this table.
|
|
23
|
+
|
|
24
|
+
| Token | Light | Dark | Role |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| `--bg` | `#f7f8fa` | `#0f1218` | app ground |
|
|
27
|
+
| `--panel` | `#ffffff` | `#161b24` | cards, bars, dialogs, inputs |
|
|
28
|
+
| `--panel-2` | `#f7f8fa` | `#1b212c` | inset / table headers / quiet stat tiles |
|
|
29
|
+
| `--ink` | `#1a1f2b` | `#e8ecf3` | primary text |
|
|
30
|
+
| `--muted` | `#5b6472` | `#8a93a6` | secondary text, labels, metadata |
|
|
31
|
+
| `--border` / `-strong` | `#e6e9ef` / `#d7dce4` | `#232a36` / `#2c3441` | 1px lines / stronger edges |
|
|
32
|
+
| `--accent` (`-weak`) | `#2f6feb` (`#eaf0fe`) | `#4b8bff` (`#1b2740`) | THE one accent + its tint |
|
|
33
|
+
| `--ok` | `#1a7f37`-family green | brightened | done / healthy / success |
|
|
34
|
+
| `--warn` | amber | brightened | needs a human / waiting (reserved) |
|
|
35
|
+
| `--danger` | red | brightened | failed / error / incident |
|
|
36
|
+
| `--info` | blue | brightened | running / working |
|
|
37
|
+
|
|
38
|
+
Semantic colors are STATE ONLY, never decoration; each has a `-weak` tint
|
|
39
|
+
for badge/banner fills. Amber is reserved for "a human is needed". A second
|
|
40
|
+
accent hue is a design defect. Sequential data scales (heatmaps, charts)
|
|
41
|
+
are tints of `--accent`, not a new hue.
|
|
42
|
+
|
|
43
|
+
## Type
|
|
44
|
+
|
|
45
|
+
- UI face: system stack (`-apple-system, "SF Pro", "Segoe UI", sans-serif`)
|
|
46
|
+
— zero load cost. Weights 400 body / 600 emphasis / 700 headings only.
|
|
47
|
+
- Data face: `ui-monospace / SF Mono` for ALL data — ids, metrics,
|
|
48
|
+
timestamps, counters, chips, logs; `font-variant-numeric: tabular-nums`
|
|
49
|
+
wherever digits align.
|
|
50
|
+
- Compact scale: 11px chips/meta · 12px labels (uppercase, tracked .1em) ·
|
|
51
|
+
13px body/dense UI · 15px card titles · 20px sections · 28px page title.
|
|
52
|
+
- Running text ≤65ch; headings `text-wrap: balance`.
|
|
53
|
+
|
|
54
|
+
## Texture & surface
|
|
55
|
+
|
|
56
|
+
- **Elevation = border, not shadow**: layers separate via 1px `--border` +
|
|
57
|
+
`--panel`/`--panel-2` steps. One soft shadow token exists, for true
|
|
58
|
+
overlays (dialogs, popovers, menus) only.
|
|
59
|
+
- Radii: 6px controls · 8–10px cards · 999px chips/pills. Nothing else.
|
|
60
|
+
- 4px base grid; spacing steps 4/8/12/16/24/32; chips 2×8, dense rows
|
|
61
|
+
8×12, cards 12–16. Compact by default.
|
|
62
|
+
- Stat tiles: label 12px `--muted` + value 20–28px semibold tabular-nums
|
|
63
|
+
on a quiet `--panel-2` fill or 1px-border card — no gradients, no fills
|
|
64
|
+
with meaning-free color.
|
|
65
|
+
- No decorative containers, no icon noise: if an element doesn't inform
|
|
66
|
+
or act, it doesn't exist.
|
|
67
|
+
|
|
68
|
+
## Motion tokens
|
|
69
|
+
|
|
70
|
+
- 150–200ms, ease-out, and only where it carries meaning (state
|
|
71
|
+
transition, attention pull); nothing looping, nothing scroll-driven.
|
|
72
|
+
- Hover/press transitions 120ms on background/border/color only — no
|
|
73
|
+
translate/bounce on controls.
|
|
74
|
+
- `prefers-reduced-motion` → transitions off; the UI is fully static-safe.
|
|
75
|
+
|
|
76
|
+
## Signature motifs
|
|
77
|
+
|
|
78
|
+
- **Glanceability**: every surface answers its question in one glance —
|
|
79
|
+
state → status dot/chip, trend → axis-less sparkline, change → one
|
|
80
|
+
delta line («+4 done · fix deployed»). Detail is one drill-down away.
|
|
81
|
+
- **Honest state**: no fake "connected", no optimistic spinners; degraded
|
|
82
|
+
renders visibly degraded (dimmed pane, banner, chip).
|
|
83
|
+
- Canonical atoms, built once: status dot (7–8px), mono chip (11px, 1px
|
|
84
|
+
border, radius 999), card (panel + border + title row + right chip),
|
|
85
|
+
progress bar (4–5px, border track, accent fill), segmented pill
|
|
86
|
+
controls, empty state = one dim sentence + one action (no
|
|
87
|
+
illustrations).
|
|
88
|
+
- Data tables: 32–36px rows, `--panel-2` sticky header, hairline row
|
|
89
|
+
dividers, right-aligned numeric columns.
|
|
90
|
+
|
|
91
|
+
## Micro-interactions
|
|
92
|
+
|
|
93
|
+
- Hover on rows/nav: `--panel-2` fill; selected/active: `--accent-weak`
|
|
94
|
+
fill + 2px accent inset indicator.
|
|
95
|
+
- Buttons: primary = accent fill (max one per view); secondary =
|
|
96
|
+
1px-border ghost; destructive = red-border ghost + confirm. Toggles,
|
|
97
|
+
not checkboxes, for enable/disable.
|
|
98
|
+
- Focus-visible on everything: 2px accent outline, offset 2px; contrast
|
|
99
|
+
≥ WCAG AA on both themes.
|
|
100
|
+
- Keyboard-first: every primary action reachable via keyboard; ⌘K
|
|
101
|
+
palette as the front door where the product has one.
|
|
102
|
+
|
|
103
|
+
## Bans
|
|
104
|
+
|
|
105
|
+
- No gradients, no shadows-as-decoration, no glassmorphism, no
|
|
106
|
+
illustrations/mascots, no icon noise, no emojis in product UI.
|
|
107
|
+
- No second accent hue; no semantic color used decoratively; no amber
|
|
108
|
+
outside "needs a human".
|
|
109
|
+
- No display/serif fonts — this is a workbench, not a brand page.
|
|
110
|
+
- No spinners where live state exists; no badge without an action.
|
|
111
|
+
- No cinematic/scroll-driven motion — that belongs to the other packs'
|
|
112
|
+
register.
|
|
113
|
+
|
|
114
|
+
## Gotchas
|
|
115
|
+
|
|
116
|
+
- Ship light AND dark from day one via the token layer — retrofitting a
|
|
117
|
+
theme later leaves inverted hardcodes (sweep raw hex; consume only
|
|
118
|
+
`var(--…)`).
|
|
119
|
+
- Guard contrast with a test: muted-on-panel-2 combinations silently
|
|
120
|
+
fail AA when tokens drift.
|
|
121
|
+
- One shared Chip/Badge/Button primitive — three inline copies of an
|
|
122
|
+
atom is how a token layer rots.
|