sheleg-design-skill 1.2.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/README.md +15 -6
- package/bin/cli.js +5 -4
- package/package.json +1 -1
- package/plugins/sheleg-design/.claude-plugin/plugin.json +1 -1
- package/plugins/sheleg-design/skills/sheleg-design/SKILL.md +2 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/briefing-room.md +156 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/briefing-room.css +118 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,59 @@ 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.3.2] - 2026-07-30
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **The licence is declared in both manifests** — SPDX `license: MIT` in the
|
|
12
|
+
`marketplace.json` plugin entry and in the skill's front matter (mirrored into
|
|
13
|
+
the `.cursor` copy, which the validator holds byte-identical). The `LICENSE`
|
|
14
|
+
file was always present and visible on neither surface a user actually reads.
|
|
15
|
+
|
|
16
|
+
## [1.3.1] - 2026-07-30
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- **README** — the family list gained `agent-sync`, and the install block now
|
|
21
|
+
carries all three family commands (`install`, `update`, `list`) with the
|
|
22
|
+
restart note; skills and hooks load at session start, so the session that
|
|
23
|
+
updates is not the session that gets the new ones. The registry copy of the
|
|
24
|
+
README is what most people read, and it only moves on a release.
|
|
25
|
+
- `CONTRIBUTING.md` — how to run `test/validate.py` and what a PR is checked
|
|
26
|
+
against.
|
|
27
|
+
|
|
28
|
+
## [1.3.0] - 2026-07-29
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- **Fourth style pack: `briefing-room`** — a register the skill had no answer
|
|
33
|
+
for. Decks are among the most-requested things people ask an agent to build,
|
|
34
|
+
and the default output is bullet lists on a gradient. Extracted from a
|
|
35
|
+
production investor-deck site (2026) by reading its live token layer; the
|
|
36
|
+
source is **anonymized at the owner's request**, so the `Origin:` line says
|
|
37
|
+
what it is without naming it — the values are still extracted rather than
|
|
38
|
+
invented, which is the point of the rule.
|
|
39
|
+
|
|
40
|
+
What it encodes: a fixed **1280×720 canvas with `overflow: hidden`** (content
|
|
41
|
+
that does not fit becomes a second slide — never a smaller type ramp); the
|
|
42
|
+
first **OKLCH** token layer in the skill, where every neutral is the accent
|
|
43
|
+
hue `254` starved of chroma, so the palette cannot drift into two designs;
|
|
44
|
+
Inter at tight optical tracking against JetBrains Mono furniture at `+0.14em`
|
|
45
|
+
to `+0.18em`; a two-part veil that protects text over artwork **without**
|
|
46
|
+
fading the artwork; 1-bit dithered art as the only imagery; mono numbered
|
|
47
|
+
section headers; **the slide title is a claim, not a label**; one bespoke
|
|
48
|
+
diagram per slide instead of bullets; exactly one highlighted phrase per
|
|
49
|
+
deck; and every number carrying its source.
|
|
50
|
+
|
|
51
|
+
Its motion position is a deliberate inversion of the rest of the skill:
|
|
52
|
+
**slides never animate**, because the presenter's voice is the timeline.
|
|
53
|
+
`prefers-reduced-motion` is a no-op by construction rather than by neglect.
|
|
54
|
+
|
|
55
|
+
Two honest notes carried as Gotchas: a fixed canvas fails *silently* (clipped
|
|
56
|
+
content is invisible in review and obvious in the room), and the reference
|
|
57
|
+
shipped no print or reduced-motion branch — the pack requires both.
|
|
58
|
+
- `scenarios.md` gains T10 for the deck register. Gate: 194 → 220 checks.
|
|
59
|
+
|
|
7
60
|
## [1.2.0] - 2026-07-29
|
|
8
61
|
|
|
9
62
|
Worked through Figma's *State of the Designer 2026* (NewtonX, 906 digital
|
package/README.md
CHANGED
|
@@ -34,15 +34,18 @@ and collectively cinematic. One scroll "clock" feeds a WebGL particle field, a
|
|
|
34
34
|
rail — each an independent, degrade-to-calm layer. Nothing crossfades; things
|
|
35
35
|
*redeploy*.
|
|
36
36
|
|
|
37
|
-
**Style packs** — the visual identity, pluggable per project.
|
|
38
|
-
|
|
39
|
-
light/dark product UI for dashboards, admin panels, internal and dev
|
|
37
|
+
**Style packs** — the visual identity, pluggable per project. Two of them are
|
|
38
|
+
meant to be used **standalone**, with none of the motion layer: `workbench`
|
|
39
|
+
(quiet light/dark product UI for dashboards, admin panels, internal and dev
|
|
40
|
+
tools) and `briefing-room` (a dark 16:9 presentation deck, where the presenter's
|
|
41
|
+
voice is the timeline and slides therefore never animate).
|
|
40
42
|
|
|
41
43
|
| Pack | Look | Choose for |
|
|
42
44
|
|---|---|---|
|
|
43
45
|
| `instrument-console` | near-black aerospace console, one electric-blue signal, mono telemetry | technical / systems / infra |
|
|
44
46
|
| `editorial-luxury` | warm cream + espresso ink, sage accent, Fraunces/Newsreader, dossier motifs | editorial / research / premium B2B |
|
|
45
47
|
| `workbench` | neutral grays, borders as elevation, one blue accent, mono data, light + dark twins | dashboards, admin, internal & dev tools |
|
|
48
|
+
| `briefing-room` | dark 16:9 deck: one blue hue top to bottom (OKLCH), mono slide furniture, 1-bit dithered art, claims as titles | investor & board decks, technical briefings, talks published as a page |
|
|
46
49
|
|
|
47
50
|
Each pack locks palette, type, texture, motion tokens, signature motifs and
|
|
48
51
|
bans — and ships a `tokens/<pack>.css` to copy verbatim, so the agent never
|
|
@@ -212,13 +215,19 @@ Built by ssheleg — [sshlg.me](https://sshlg.me)
|
|
|
212
215
|
- Telegram — [@sshlg](https://t.me/sshlg)
|
|
213
216
|
|
|
214
217
|
Part of the [ssheleg skill family](https://github.com/ssheleg/sshlg-skills):
|
|
215
|
-
`super-ux`, `task-pipeline`, `make-skill`, `sheleg-design`, `seo-aeo-audit`.
|
|
216
|
-
|
|
218
|
+
`super-ux`, `task-pipeline`, `agent-sync`, `make-skill`, `sheleg-design`, `seo-aeo-audit`.
|
|
219
|
+
**The family installs and updates as one package**, for every agent you use — a bundle with one
|
|
220
|
+
member current and the rest stale is a combination nobody tested:
|
|
217
221
|
|
|
218
222
|
```bash
|
|
219
|
-
npx sshlg-skills install
|
|
223
|
+
npx sshlg-skills install # nothing installed yet — the whole family, any agent
|
|
224
|
+
npx sshlg-skills update # installed but behind — updates everything
|
|
225
|
+
npx --yes sshlg-skills@latest list # what the current release of each member is
|
|
220
226
|
```
|
|
221
227
|
|
|
228
|
+
Restart your agent afterwards: skills and hooks load at session start, so the session that
|
|
229
|
+
updates is not the session that gets the new ones.
|
|
230
|
+
|
|
222
231
|
## License
|
|
223
232
|
|
|
224
233
|
MIT © ssheleg
|
package/bin/cli.js
CHANGED
|
@@ -115,10 +115,11 @@ ${c("bold", "What it installs")}
|
|
|
115
115
|
SHELEG_DESIGN.md the full reference (architecture, recipes, why it works)
|
|
116
116
|
FIGMA_BRIDGE.md the design↔code contract (tokens ⇄ Figma variables)
|
|
117
117
|
AI_PRODUCT_PATTERNS.md chat / agent / streaming surfaces (honest state)
|
|
118
|
-
styles/
|
|
118
|
+
styles/ four style packs — instrument-console (dark console),
|
|
119
119
|
editorial-luxury (warm editorial), workbench (light/dark
|
|
120
|
-
product UI,
|
|
121
|
-
|
|
120
|
+
product UI), briefing-room (dark 16:9 presentation deck)
|
|
121
|
+
— plus a ready-made token CSS per pack and
|
|
122
|
+
STYLE_PACK_TEMPLATE.md for authoring more
|
|
122
123
|
`);
|
|
123
124
|
}
|
|
124
125
|
|
|
@@ -191,7 +192,7 @@ function main() {
|
|
|
191
192
|
`\n${c("green", "✓")} ${c("bold", "SHELEG Design")} installed to ${c("blue", rel + "/")}\n` +
|
|
192
193
|
` ${c("dim", "SKILL.md")} the agent skill\n` +
|
|
193
194
|
` ${c("dim", "SHELEG_DESIGN.md")} the full reference\n` +
|
|
194
|
-
` ${c("dim", "styles/")} style packs + token CSS (instrument-console / editorial-luxury / workbench)\n\n` +
|
|
195
|
+
` ${c("dim", "styles/")} style packs + token CSS (instrument-console / editorial-luxury / workbench / briefing-room)\n\n` +
|
|
195
196
|
`Your Cursor / Claude agent can now discover the skill and build\n` +
|
|
196
197
|
`cinematic, scroll-driven pages — or style product UI (dashboards,\n` +
|
|
197
198
|
`admin, internal tools) from the workbench pack — on its principles.\n\n` +
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sheleg-design-skill",
|
|
3
|
-
"version": "1.2
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"description": "Design taste as an installable agent skill. Cinematic scroll-driven landing pages built on one scroll clock and layered degrade-to-calm motion, plus three locked style packs with ready-made design tokens — instrument-console (dark), editorial-luxury (warm), workbench (light/dark product UI for dashboards, admin and dev tools). Works with Cursor, Claude Code and any agent that reads a SKILL.md.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sheleg-design-skill": "bin/cli.js"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sheleg-design",
|
|
3
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": "1.2
|
|
4
|
+
"version": "1.3.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "ssheleg"
|
|
7
7
|
},
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sheleg-design
|
|
3
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 - 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" / "скролл-анимация", "particle landing" / "лендинг с частицами", "dashboard style" / "стиль дашборда", "design tokens" / "дизайн-токены", "light/dark theme" / "светлая/тёмная тема", "figma variables" / "переменные фигмы", "figma to code" / "фигма в код", "chat/agent UI" / "интерфейс чата или агента", "streaming output" / "стриминг ответа".
|
|
4
|
+
license: MIT
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# SHELEG Design
|
|
@@ -62,6 +63,7 @@ style pack in [`styles/`](./styles/):
|
|
|
62
63
|
| [`instrument-console`](./styles/instrument-console.md) | near-black aerospace console, one electric-blue signal, mono telemetry | technical / systems / infra products |
|
|
63
64
|
| [`editorial-luxury`](./styles/editorial-luxury.md) | warm cream + espresso ink, sage accent, Fraunces/Newsreader, dossier motifs | editorial / research / premium B2B |
|
|
64
65
|
| [`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) |
|
|
66
|
+
| [`briefing-room`](./styles/briefing-room.md) | dark presentation deck on a fixed 16:9 canvas: one blue hue top to bottom (OKLCH), mono slide furniture, 1-bit dithered art | investor & board decks, technical briefings, talks published as a page (standalone — slides never animate) |
|
|
65
67
|
|
|
66
68
|
Read the chosen pack in full before styling anything — it supplies the
|
|
67
69
|
palette, type, texture, motion-token values, signature motifs, and bans.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Style pack — Briefing Room
|
|
2
|
+
|
|
3
|
+
Origin: a production investor-deck site (2026); every value below was read off
|
|
4
|
+
its live token layer, not eyeballed. The source is **anonymized at the owner's
|
|
5
|
+
request** — the values are extracted from a real system, the name simply isn't
|
|
6
|
+
public. Near-black field tinted with a single blue hue, one electric accent,
|
|
7
|
+
mono slide furniture, 1-bit dithered artwork. It reads like a technical
|
|
8
|
+
briefing: the room is dark, one thing is lit.
|
|
9
|
+
|
|
10
|
+
## Register
|
|
11
|
+
|
|
12
|
+
Choose this pack for **presentations rendered as a product**: investor and
|
|
13
|
+
board decks, technical briefings, launch memos, architecture walkthroughs,
|
|
14
|
+
conference talks published as a page. Used **standalone** — the SHELEG
|
|
15
|
+
cinematic motion layer does not apply, because a deck is *read at the
|
|
16
|
+
presenter's pace*, not scrolled. Single dark register; the accent carries all
|
|
17
|
+
emphasis.
|
|
18
|
+
|
|
19
|
+
The defining constraint is the canvas: a fixed **1280×720 (16:9) frame with
|
|
20
|
+
`overflow: hidden`**, not a flowing page. Everything below follows from that —
|
|
21
|
+
if content cannot fit the frame, the answer is a second slide, never a smaller
|
|
22
|
+
type ramp.
|
|
23
|
+
|
|
24
|
+
## Palette
|
|
25
|
+
|
|
26
|
+
Ready-made token layer: [`tokens/briefing-room.css`](./tokens/briefing-room.css)
|
|
27
|
+
— copy it verbatim instead of transcribing this table.
|
|
28
|
+
|
|
29
|
+
| Token | Value | Role |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| `--bg` | `oklch(0.045 0.008 254)` | the room (near-black, blue-tinted) |
|
|
32
|
+
| `--panel` / `-2` | `oklch(0.145 0.008 254)` / `oklch(0.178 0.008 254)` | card / raised card |
|
|
33
|
+
| `--line` / `-2` | `oklch(0.231 0.006 254)` / `oklch(0.269 0.006 254)` | hairline / stronger edge |
|
|
34
|
+
| `--ink` | `oklch(0.985 0.004 254)` | display and primary text |
|
|
35
|
+
| `--ink-2` / `-3` / `-dim` | `oklch(0.80 …)` / `oklch(0.62 …)` / `oklch(0.56 0.006 254)` | body / muted / furniture |
|
|
36
|
+
| `--accent` | `oklch(0.643 0.195 254)` | THE signal — one per slide |
|
|
37
|
+
| `--accent-soft` / `-line` | `accent / 0.18` / `accent / 0.45` | chip fill / chip border |
|
|
38
|
+
| `--accent-ink` | `= --bg` | text **on** the accent (never white) |
|
|
39
|
+
| `--good` (`-soft`) | `oklch(0.824 0.151 148)` (`/0.30`) | the one positive semantic |
|
|
40
|
+
|
|
41
|
+
Two things make this palette cohere, and both are easy to lose:
|
|
42
|
+
|
|
43
|
+
- **One hue, top to bottom.** Every neutral carries hue `254` at chroma
|
|
44
|
+
0.004–0.008. They are not gray — they are the accent, starved of chroma. Swap
|
|
45
|
+
in true neutrals and the deck immediately looks like two designs.
|
|
46
|
+
- **OKLCH, not hex.** Lightness is perceptual, so a ramp built by moving `L`
|
|
47
|
+
alone stays even; tints are the same color with an alpha, never a new swatch.
|
|
48
|
+
Ship a hex fallback layer only if you must support pre-2023 browsers.
|
|
49
|
+
|
|
50
|
+
Contrast: `--ink-dim` is for slide furniture (numbers, footers) at ≥10.5px mono
|
|
51
|
+
only — never body copy.
|
|
52
|
+
|
|
53
|
+
## Type
|
|
54
|
+
|
|
55
|
+
- Display + body: **Inter** — weight 600 for display, 500 for slide titles,
|
|
56
|
+
400 body. Tight optical tracking: `-0.04em` at display, `-0.03em` at title,
|
|
57
|
+
`-0.005em` at body.
|
|
58
|
+
- Furniture: **JetBrains Mono** at 10.5–13px, uppercase, tracked **`+0.14em`
|
|
59
|
+
to `+0.18em`** — section headers, footers, source lines, chip labels. The
|
|
60
|
+
wide tracking is doing the work here; mono at normal tracking reads as code,
|
|
61
|
+
not as instrumentation.
|
|
62
|
+
- Scale (fixed canvas, so fixed px): `128 / 96 / 64 / 36 / 24 / 17 / 14 / 13 /
|
|
63
|
+
10.5`. Line height `1.02` display, `1.05` head, `1.5` lede, `1.55` body.
|
|
64
|
+
- `text-wrap: balance` on every display and title — on a fixed canvas a
|
|
65
|
+
one-word orphan is a visible defect, not a nuance.
|
|
66
|
+
|
|
67
|
+
## Texture & surface
|
|
68
|
+
|
|
69
|
+
- Elevation is **surface step + hairline**, never a glow. One card shadow
|
|
70
|
+
exists (`0 28px 70px -28px rgba(0,0,0,0.85)`) and it is for lifted cards on
|
|
71
|
+
the dark field; a second, tighter one for popovers.
|
|
72
|
+
- Radii `4 / 6 / 12 / 18 / 24 / 999`. Chips and pills take 999; cards take
|
|
73
|
+
12–18; the frame itself is square.
|
|
74
|
+
- 4px spacing grid **with deliberate half-steps** (18, 22, 36) — dense
|
|
75
|
+
information layouts need the in-between values, and inventing them per slide
|
|
76
|
+
is how a deck loses its rhythm.
|
|
77
|
+
- **Artwork is 1-bit dithered/halftone, never a photo or a 3D render.** A
|
|
78
|
+
single large dithered form per cover, in the accent, sitting under the text.
|
|
79
|
+
- Text over artwork is protected by a **two-part veil**: a directional
|
|
80
|
+
`linear-gradient(95deg, …)` from 0.85 to near-transparent, plus a radial
|
|
81
|
+
darkening in the corner where the text sits. Never lower the artwork's
|
|
82
|
+
opacity to fix legibility — veil the art, keep the art crisp.
|
|
83
|
+
- One radial accent glow per slide at most: `radial-gradient(58% 46% at 50%
|
|
84
|
+
26%, var(--accent-soft), transparent 70%)`.
|
|
85
|
+
|
|
86
|
+
## Motion tokens
|
|
87
|
+
|
|
88
|
+
- Durations `0.15s` / `0.2s`; ease `cubic-bezier(0.22, 1, 0.36, 1)`. That is
|
|
89
|
+
the whole set — this pack overrides the SHELEG default ease, same as
|
|
90
|
+
`editorial-luxury`.
|
|
91
|
+
- **Slides do not animate.** No transitions between slides, no build-in
|
|
92
|
+
sequences, no scroll-linked anything: the presenter's voice is the timeline,
|
|
93
|
+
and motion competes with it. Transitions exist only on interactive
|
|
94
|
+
affordances (links, focus).
|
|
95
|
+
- `prefers-reduced-motion` is a no-op here by construction — which is the
|
|
96
|
+
correct end state, not an excuse to skip the branch.
|
|
97
|
+
|
|
98
|
+
## Signature motifs
|
|
99
|
+
|
|
100
|
+
- **The slide frame as furniture:** mono uppercase header (`[04] MARKET · WHY
|
|
101
|
+
NOW`), body, mono footer. Numbered sections make a 40-minute deck navigable
|
|
102
|
+
by voice ("go back to four").
|
|
103
|
+
- **The title is a claim, not a label.** Every slide's headline is a full
|
|
104
|
+
sentence asserting something ("Financial access is already global; the gap is
|
|
105
|
+
guidance") — never a noun like "Market". The claim is the argument; the
|
|
106
|
+
diagram below is its evidence.
|
|
107
|
+
- **One bespoke diagram per slide, never a bullet list.** The recurring set:
|
|
108
|
+
opposing poles with the gap named between them; a staged flow with hairline
|
|
109
|
+
connectors; a positioning map with two labeled axes and dot nodes; lanes or a
|
|
110
|
+
funnel for a money path; a comparison table with one column marked as *us*;
|
|
111
|
+
an allocation bar with a legend.
|
|
112
|
+
- **Highlight exactly one phrase per deck** — an accent-filled marker behind
|
|
113
|
+
the single sentence fragment the whole story hangs on, with `--accent-ink`
|
|
114
|
+
text on it. A second highlight halves the first.
|
|
115
|
+
- **Every number carries its source** in mono, directly beneath it. An
|
|
116
|
+
unsourced figure on an investor slide is a liability, and the source line is
|
|
117
|
+
also what makes the layout read as instrumentation.
|
|
118
|
+
- Chips (`999` radius, panel-2 fill, hairline border) for enumerations that
|
|
119
|
+
would otherwise become bullets.
|
|
120
|
+
|
|
121
|
+
## Micro-interactions
|
|
122
|
+
|
|
123
|
+
- The deck is presented, so interaction is deliberately thin: hover only on
|
|
124
|
+
genuine links, focus-visible ring in `--accent`, no hover state on static
|
|
125
|
+
cards (a card that lifts under a cursor during a live presentation is noise).
|
|
126
|
+
- Keyboard navigation between slides is the one interaction worth building
|
|
127
|
+
well; the slide number in the footer is the position indicator.
|
|
128
|
+
|
|
129
|
+
## Bans
|
|
130
|
+
|
|
131
|
+
- Bullet lists as the default slide layout; stock photography; illustrations
|
|
132
|
+
with a mascot; icon grids where a diagram belongs.
|
|
133
|
+
- Gradients as decoration (the veil and the one accent glow are the exceptions,
|
|
134
|
+
and they are functional).
|
|
135
|
+
- A second accent hue; true-neutral grays alongside the tinted ones; white text
|
|
136
|
+
on the accent fill.
|
|
137
|
+
- Animated slide transitions, build-ins, scroll-jacking, particle backgrounds —
|
|
138
|
+
wrong register entirely; that is what `instrument-console` is for.
|
|
139
|
+
- Numbers without sources; more than one highlighted phrase per deck; shrinking
|
|
140
|
+
the type ramp to fit content into a frame.
|
|
141
|
+
|
|
142
|
+
## Gotchas
|
|
143
|
+
|
|
144
|
+
- **A fixed canvas fails silently.** `overflow: hidden` means overflowing
|
|
145
|
+
content is simply invisible — nobody sees it in review, everybody sees the
|
|
146
|
+
gap in the room. Check every slide at exactly 1280×720 before shipping, not
|
|
147
|
+
at whatever the browser window happens to be.
|
|
148
|
+
- **The reference shipped no print or reduced-motion branch.** A deck gets
|
|
149
|
+
exported to PDF and read on a phone; add a print stylesheet (one slide per
|
|
150
|
+
page, veil intact) and a narrow-viewport branch that reflows the frame rather
|
|
151
|
+
than scaling it into illegibility.
|
|
152
|
+
- OKLCH renders differently on wide-gamut displays than the sRGB hex you may be
|
|
153
|
+
comparing against — verify on the screen the deck will actually be presented
|
|
154
|
+
on, which is usually a projector with a narrower gamut than your laptop.
|
|
155
|
+
- Dithered artwork must be exported at 2× and left unscaled in CSS; resampling
|
|
156
|
+
a 1-bit image destroys the dither pattern and turns it into mud.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/* SHELEG Design — Briefing Room token layer (dark presentation deck).
|
|
2
|
+
Copy verbatim; consume only var(--…) in components.
|
|
3
|
+
Neutrals are the accent hue (254) starved of chroma — keep the hue when
|
|
4
|
+
editing, or the deck reads as two designs. */
|
|
5
|
+
:root {
|
|
6
|
+
--bg: oklch(0.045 0.008 254);
|
|
7
|
+
--panel: oklch(0.145 0.008 254);
|
|
8
|
+
--panel-2: oklch(0.178 0.008 254);
|
|
9
|
+
--line: oklch(0.231 0.006 254);
|
|
10
|
+
--line-2: oklch(0.269 0.006 254);
|
|
11
|
+
|
|
12
|
+
--ink: oklch(0.985 0.004 254);
|
|
13
|
+
--ink-2: oklch(0.8 0.006 254);
|
|
14
|
+
--ink-3: oklch(0.62 0.006 254);
|
|
15
|
+
--ink-dim: oklch(0.56 0.006 254); /* furniture only, ≥10.5px mono */
|
|
16
|
+
|
|
17
|
+
--accent: oklch(0.643 0.195 254);
|
|
18
|
+
--accent-soft: oklch(0.643 0.195 254 / 0.18); /* chip fill, glow */
|
|
19
|
+
--accent-line: oklch(0.643 0.195 254 / 0.45); /* chip border */
|
|
20
|
+
--accent-ink: var(--bg); /* text ON the accent — never white */
|
|
21
|
+
--good: oklch(0.824 0.151 148);
|
|
22
|
+
--good-soft: oklch(0.824 0.151 148 / 0.3);
|
|
23
|
+
|
|
24
|
+
--radius-xs: 4px;
|
|
25
|
+
--radius-sm: 6px;
|
|
26
|
+
--radius-md: 12px;
|
|
27
|
+
--radius-lg: 18px;
|
|
28
|
+
--radius-xl: 24px;
|
|
29
|
+
--radius-pill: 999px;
|
|
30
|
+
|
|
31
|
+
/* 4px grid with deliberate half-steps for dense slide layouts */
|
|
32
|
+
--space-1: 4px;
|
|
33
|
+
--space-2: 8px;
|
|
34
|
+
--space-3: 12px;
|
|
35
|
+
--space-4: 16px;
|
|
36
|
+
--space-4-5: 18px;
|
|
37
|
+
--space-5: 20px;
|
|
38
|
+
--space-5-5: 22px;
|
|
39
|
+
--space-6: 24px;
|
|
40
|
+
--space-8: 32px;
|
|
41
|
+
--space-9: 36px;
|
|
42
|
+
--space-10: 40px;
|
|
43
|
+
--space-12: 48px;
|
|
44
|
+
--space-14: 56px;
|
|
45
|
+
--space-16: 64px;
|
|
46
|
+
--space-20: 80px;
|
|
47
|
+
|
|
48
|
+
/* Fixed 16:9 canvas — content that does not fit becomes a second slide */
|
|
49
|
+
--slide-w: 1280px;
|
|
50
|
+
--slide-h: 720px;
|
|
51
|
+
--frame-pad-x: var(--space-20);
|
|
52
|
+
--frame-pad-y: var(--space-16);
|
|
53
|
+
|
|
54
|
+
--shadow-card: 0 28px 70px -28px rgba(0, 0, 0, 0.85);
|
|
55
|
+
--shadow-pop: 0 12px 32px -12px rgba(0, 0, 0, 0.7);
|
|
56
|
+
--glow-accent: radial-gradient(
|
|
57
|
+
58% 46% at 50% 26%,
|
|
58
|
+
var(--accent-soft),
|
|
59
|
+
transparent 70%
|
|
60
|
+
);
|
|
61
|
+
/* Veil the artwork, never fade it: keeps the dither crisp under text */
|
|
62
|
+
--veil-left: linear-gradient(
|
|
63
|
+
95deg,
|
|
64
|
+
oklch(0 0 0 / 0.85) 0%,
|
|
65
|
+
oklch(0 0 0 / 0.55) 38%,
|
|
66
|
+
oklch(0 0 0 / 0.2) 70%,
|
|
67
|
+
oklch(0 0 0 / 0.05) 100%
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
--font-sans: "Inter", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
71
|
+
--font-mono: "JetBrains Mono", ui-monospace, Menlo, monospace;
|
|
72
|
+
|
|
73
|
+
--t-display: 128px;
|
|
74
|
+
--t-h1: 96px;
|
|
75
|
+
--t-h2: 64px;
|
|
76
|
+
--t-h3: 36px;
|
|
77
|
+
--t-lede: 24px;
|
|
78
|
+
--t-body: 17px;
|
|
79
|
+
--t-meta: 14px;
|
|
80
|
+
--t-mono: 13px;
|
|
81
|
+
--t-mono-sm: 10.5px;
|
|
82
|
+
|
|
83
|
+
--track-display: -0.04em;
|
|
84
|
+
--track-h1: -0.035em;
|
|
85
|
+
--track-h2: -0.03em;
|
|
86
|
+
--track-h3: -0.02em;
|
|
87
|
+
--track-body: -0.005em;
|
|
88
|
+
--track-mono: 0.14em; /* mono without tracking reads as code, not telemetry */
|
|
89
|
+
--track-mono-wide: 0.18em;
|
|
90
|
+
|
|
91
|
+
--lh-display: 1.02;
|
|
92
|
+
--lh-head: 1.05;
|
|
93
|
+
--lh-tight: 1.1;
|
|
94
|
+
--lh-lede: 1.5;
|
|
95
|
+
--lh-body: 1.55;
|
|
96
|
+
|
|
97
|
+
--weight-regular: 400;
|
|
98
|
+
--weight-medium: 500;
|
|
99
|
+
--weight-semibold: 600;
|
|
100
|
+
--weight-bold: 700;
|
|
101
|
+
|
|
102
|
+
--motion-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
103
|
+
--dur-fast: 0.15s;
|
|
104
|
+
--dur-base: 0.2s;
|
|
105
|
+
|
|
106
|
+
background-color: var(--bg);
|
|
107
|
+
color: var(--ink);
|
|
108
|
+
color-scheme: dark;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Slides never animate — the presenter is the timeline. This block should
|
|
112
|
+
have nothing to disable; if it does, the deck has motion it should not. */
|
|
113
|
+
@media (prefers-reduced-motion: reduce) {
|
|
114
|
+
:root {
|
|
115
|
+
--dur-fast: 0s;
|
|
116
|
+
--dur-base: 0s;
|
|
117
|
+
}
|
|
118
|
+
}
|