@deckio/deck-engine 0.2.1 → 0.2.3
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/instructions/AGENTS.md +12 -0
- package/instructions/deck-project.instructions.md +6 -0
- package/instructions/shadcn-components.instructions.md +283 -0
- package/instructions/shadcn-setup.instructions.md +117 -0
- package/instructions/slide-css.instructions.md +8 -0
- package/instructions/slide-jsx.instructions.md +20 -0
- package/package.json +2 -1
- package/scripts/sync-version-from-npm.mjs +68 -0
- package/skills/deck-add-slide/SKILL.md +29 -0
- package/skills/deck-validate-project/SKILL.md +38 -0
- package/styles/global.css +7 -1
- package/themes/descriptors/funky-punk.md +231 -0
- package/themes/descriptors/shadcn-design-system.md +467 -0
- package/themes/descriptors/shadcn.md +356 -106
package/styles/global.css
CHANGED
|
@@ -223,9 +223,11 @@ html, body, #root {
|
|
|
223
223
|
justify-content: center;
|
|
224
224
|
align-items: stretch;
|
|
225
225
|
opacity: 0;
|
|
226
|
+
visibility: hidden;
|
|
226
227
|
pointer-events: none;
|
|
227
228
|
transition: opacity var(--duration-slide) var(--ease-slide),
|
|
228
|
-
transform var(--duration-slide) var(--ease-slide)
|
|
229
|
+
transform var(--duration-slide) var(--ease-slide),
|
|
230
|
+
visibility 0s var(--duration-slide);
|
|
229
231
|
transform: translateX(60px);
|
|
230
232
|
overflow: hidden;
|
|
231
233
|
}
|
|
@@ -234,8 +236,12 @@ html, body, #root {
|
|
|
234
236
|
}
|
|
235
237
|
.slide.active {
|
|
236
238
|
opacity: 1;
|
|
239
|
+
visibility: visible;
|
|
237
240
|
pointer-events: auto;
|
|
238
241
|
transform: translateX(0);
|
|
242
|
+
transition: opacity var(--duration-slide) var(--ease-slide),
|
|
243
|
+
transform var(--duration-slide) var(--ease-slide),
|
|
244
|
+
visibility 0s 0s;
|
|
239
245
|
}
|
|
240
246
|
.slide.exit-left {
|
|
241
247
|
opacity: 0;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Theme Descriptor — Funky Punk
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
|
|
5
|
+
- **Theme id:** `funky-punk`
|
|
6
|
+
- **Primary slide authoring pattern:** `default`
|
|
7
|
+
- **Compatible design systems:** `default`
|
|
8
|
+
- **Mood:** loud, neon, rebellious, anti-corporate, punk-zine, high-energy
|
|
9
|
+
- **Read this file when:** `deck.config.js` uses `theme: 'funky-punk'` and you need to create, inspect, validate, or generate assets for slides
|
|
10
|
+
|
|
11
|
+
## Slide personality
|
|
12
|
+
|
|
13
|
+
Funky-punk slides scream rebellion. Jet-black canvas, hot-pink borders, electric-lime accents, offset neon text-shadows, and razor-sharp edges. Nothing is subtle — every element shouts. Think punk zine meets neon sign shop: clashing colors on purpose, uppercase everything, zero rounded corners. The built-in scanline overlay and heading text-shadows fire automatically; don't fight them, lean into the chaos.
|
|
14
|
+
|
|
15
|
+
Headings are **Bebas Neue**, always uppercase with wide letter-spacing. Body/mono text is **Space Mono**. Bullet lists use ✘ markers (styled by the theme). Horizontal rules are rainbow neon gradients. Links have wavy underlines in electric lime.
|
|
16
|
+
|
|
17
|
+
## Exact JSX skeleton
|
|
18
|
+
|
|
19
|
+
Use this exact starting structure for new slides:
|
|
20
|
+
|
|
21
|
+
```jsx
|
|
22
|
+
import { BottomBar, Slide } from '@deckio/deck-engine'
|
|
23
|
+
import styles from './MyNewSlide.module.css'
|
|
24
|
+
|
|
25
|
+
export default function MyNewSlide({ index, project }) {
|
|
26
|
+
return (
|
|
27
|
+
<Slide index={index} className={styles.myNewSlide}>
|
|
28
|
+
<div className="accent-bar" />
|
|
29
|
+
<div className={`orb ${styles.orb1}`} />
|
|
30
|
+
<div className={`orb ${styles.orb2}`} />
|
|
31
|
+
|
|
32
|
+
<div className={`${styles.body} content-frame content-gutter`}>
|
|
33
|
+
{/* Slide content */}
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<BottomBar text="Project Footer Text" />
|
|
37
|
+
</Slide>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Required child order inside `<Slide>`
|
|
43
|
+
|
|
44
|
+
1. `<div className="accent-bar" />` — renders as hot pink via `var(--primary)`
|
|
45
|
+
2. `2–4` decorative orb elements using the global `orb` class plus local positioning classes — use the neon palette for maximum clash
|
|
46
|
+
3. One content wrapper using `content-frame content-gutter`
|
|
47
|
+
4. `<BottomBar text="..." />` as the last child
|
|
48
|
+
|
|
49
|
+
## Exact CSS skeleton
|
|
50
|
+
|
|
51
|
+
```css
|
|
52
|
+
.myNewSlide {
|
|
53
|
+
background: var(--background);
|
|
54
|
+
padding: 0 0 44px 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.orb1 {
|
|
58
|
+
width: 500px;
|
|
59
|
+
height: 500px;
|
|
60
|
+
top: -120px;
|
|
61
|
+
right: -80px;
|
|
62
|
+
background: radial-gradient(
|
|
63
|
+
circle at 40% 40%,
|
|
64
|
+
var(--pink),
|
|
65
|
+
color-mix(in srgb, var(--pink) 30%, transparent) 50%,
|
|
66
|
+
transparent 70%
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.orb2 {
|
|
71
|
+
width: 380px;
|
|
72
|
+
height: 380px;
|
|
73
|
+
bottom: -60px;
|
|
74
|
+
left: -40px;
|
|
75
|
+
background: radial-gradient(
|
|
76
|
+
circle at 50% 50%,
|
|
77
|
+
var(--cyan),
|
|
78
|
+
color-mix(in srgb, var(--purple) 25%, transparent) 55%,
|
|
79
|
+
transparent 75%
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.body {
|
|
84
|
+
position: relative;
|
|
85
|
+
z-index: 10;
|
|
86
|
+
display: flex;
|
|
87
|
+
flex-direction: column;
|
|
88
|
+
gap: 24px;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.cards {
|
|
92
|
+
display: grid;
|
|
93
|
+
grid-template-columns: repeat(3, 1fr);
|
|
94
|
+
gap: 24px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.card {
|
|
98
|
+
position: relative;
|
|
99
|
+
overflow: hidden;
|
|
100
|
+
background: var(--card);
|
|
101
|
+
border: 2px solid var(--border);
|
|
102
|
+
border-radius: var(--radius-md);
|
|
103
|
+
padding: 24px;
|
|
104
|
+
box-shadow: var(--shadow-elevated);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.card::before {
|
|
108
|
+
content: '';
|
|
109
|
+
position: absolute;
|
|
110
|
+
top: 0;
|
|
111
|
+
left: 0;
|
|
112
|
+
right: 0;
|
|
113
|
+
height: 3px;
|
|
114
|
+
background: linear-gradient(90deg, var(--pink), var(--accent), var(--cyan), var(--purple));
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Key CSS rules for funky-punk
|
|
119
|
+
|
|
120
|
+
- **Sharp edges everywhere.** `border-radius` must be `0px`–`4px` max. Use `var(--radius-md)` (2px) or `var(--radius-sm)` (0px). Never round off corners.
|
|
121
|
+
- **Borders are neon.** Use `var(--border)` which resolves to hot pink. Make borders `2px solid` not `1px solid`.
|
|
122
|
+
- **Shadows glow pink/lime.** Use `var(--shadow-elevated)` for neon glow or hand-craft with `var(--glow-primary)` / `var(--glow-ring)`.
|
|
123
|
+
- **Card top-stripe is rainbow.** The `::before` gradient should use multiple neon stops: `var(--pink)`, `var(--accent)`, `var(--cyan)`, `var(--purple)`.
|
|
124
|
+
- **Transitions are snappy.** Use `var(--transition-fast)` (0.08s) or `var(--transition-base)` (0.15s). Nothing slow or floaty.
|
|
125
|
+
|
|
126
|
+
## Token table
|
|
127
|
+
|
|
128
|
+
### Use these tokens
|
|
129
|
+
|
|
130
|
+
| Token | Value | When to use |
|
|
131
|
+
|---|---|---|
|
|
132
|
+
| `var(--background)` | `#0a0a0a` | Slide backgrounds, deep surfaces |
|
|
133
|
+
| `var(--foreground)` | `#f0f0f0` | Primary text, headings |
|
|
134
|
+
| `var(--card)` | `#1a1a1a` | Card / panel backgrounds |
|
|
135
|
+
| `var(--card-foreground)` | `#f0f0f0` | Text inside cards |
|
|
136
|
+
| `var(--primary)` | `#ff2d6f` | Hot pink — hero elements, accent bar, key actions |
|
|
137
|
+
| `var(--primary-foreground)` | `#000000` | Text on primary-colored surfaces |
|
|
138
|
+
| `var(--secondary)` | `#1c1c2e` | Secondary card/panel backgrounds |
|
|
139
|
+
| `var(--secondary-foreground)` | `#e0ff00` | Text on secondary surfaces (electric lime) |
|
|
140
|
+
| `var(--accent)` | `#e0ff00` | Electric lime — highlights, emphasis, links |
|
|
141
|
+
| `var(--accent-foreground)` | `#000000` | Text on accent surfaces |
|
|
142
|
+
| `var(--muted)` | `#2a2a2a` | Muted backgrounds, input fields |
|
|
143
|
+
| `var(--muted-foreground)` | `#888888` | Subdued text, timestamps, footnotes |
|
|
144
|
+
| `var(--border)` | `#ff2d6f` | Hot pink borders — all borders scream |
|
|
145
|
+
| `var(--ring)` | `rgba(224, 255, 0, 0.6)` | Focus rings, interactive outlines |
|
|
146
|
+
| `var(--radius)` | `2px` | Base radius — sharp, not smooth |
|
|
147
|
+
| `var(--destructive)` | `#ff0040` | Error / danger states |
|
|
148
|
+
| `var(--blue-glow)` | `#00e5ff` | Cyan decorative glow |
|
|
149
|
+
| `var(--purple)` | `#bf00ff` | Purple decorative accent |
|
|
150
|
+
| `var(--purple-deep)` | `#7b00cc` | Deeper purple for orbs, gradients |
|
|
151
|
+
| `var(--pink)` | `#ff2d6f` | Hot pink decorative (alias of primary) |
|
|
152
|
+
| `var(--cyan)` | `#00e5ff` | Cyan decorative (alias of blue-glow) |
|
|
153
|
+
| `var(--green)` | `#e0ff00` | Electric lime decorative (alias of accent) |
|
|
154
|
+
| `var(--surface-overlay)` | `rgba(10, 10, 10, 0.85)` | Translucent dark overlay panels |
|
|
155
|
+
| `var(--surface-overlay-heavy)` | `rgba(10, 10, 10, 0.95)` | Near-opaque overlay for modals |
|
|
156
|
+
| `var(--border-subtle)` | `rgba(255, 45, 111, 0.35)` | Softer pink border for secondary elements |
|
|
157
|
+
| `var(--glow-primary)` | `rgba(255, 45, 111, 0.3)` | Pink glow for box-shadow / drop-shadow |
|
|
158
|
+
| `var(--glow-primary-strong)` | `rgba(255, 45, 111, 0.45)` | Stronger pink glow for hover states |
|
|
159
|
+
| `var(--glow-ring)` | `rgba(224, 255, 0, 0.3)` | Lime glow for emphasis borders |
|
|
160
|
+
| `var(--glow-accent)` | `rgba(224, 255, 0, 0.15)` | Subtle lime glow, background washes |
|
|
161
|
+
| `var(--glow-purple)` | `rgba(191, 0, 255, 0.2)` | Purple glow for decorative depth |
|
|
162
|
+
| `var(--glow-cyan)` | `rgba(0, 229, 255, 0.15)` | Cyan glow for cool-tone accents |
|
|
163
|
+
| `var(--dot-color)` | `rgba(255, 45, 111, 0.2)` | Dot-grid pattern fill |
|
|
164
|
+
| `var(--shadow-elevated)` | multi-stop pink + lime glow | Elevated card shadows |
|
|
165
|
+
|
|
166
|
+
### Never regress to
|
|
167
|
+
|
|
168
|
+
- `var(--bg-deep)` — removed legacy token
|
|
169
|
+
- `var(--surface)` — removed legacy token
|
|
170
|
+
- `var(--text)` or `var(--text-muted)` — removed legacy tokens
|
|
171
|
+
- Hardcoded `rgba(...)` or `#hex` values when a token exists — always use the token
|
|
172
|
+
|
|
173
|
+
## Typography tokens
|
|
174
|
+
|
|
175
|
+
| Token | Value | Usage |
|
|
176
|
+
|---|---|---|
|
|
177
|
+
| `var(--font-family)` | `'Bebas Neue', 'Impact', 'Arial Black', sans-serif` | Headings, display text |
|
|
178
|
+
| `var(--font-family-mono)` | `'Space Mono', 'Courier New', monospace` | Code, technical labels |
|
|
179
|
+
| `var(--font-size-display)` | `clamp(48px, 8vw, 80px)` | Hero / title text |
|
|
180
|
+
| `var(--font-size-2xl)` | `40px` | Section headings |
|
|
181
|
+
| `var(--font-size-xl)` | `28px` | Sub-headings |
|
|
182
|
+
| `var(--font-size-lg)` | `22px` | Large body / lead text |
|
|
183
|
+
| `var(--font-size-base)` | `17px` | Body copy |
|
|
184
|
+
| `var(--font-weight-extrabold)` | `900` | Headings, bold emphasis |
|
|
185
|
+
| `var(--font-weight-bold)` | `700` | Strong text |
|
|
186
|
+
| `var(--letter-spacing-wide)` | `3px` | Default heading spacing |
|
|
187
|
+
| `var(--letter-spacing-wider)` | `5px` | Screaming subheadings |
|
|
188
|
+
| `var(--letter-spacing-widest)` | `8px` | Labels, eyebrow text |
|
|
189
|
+
| `var(--line-height-tight)` | `1.1` | Headings |
|
|
190
|
+
| `var(--line-height-normal)` | `1.4` | Body text |
|
|
191
|
+
|
|
192
|
+
## Decorative elements available
|
|
193
|
+
|
|
194
|
+
| Element | How to use it |
|
|
195
|
+
|---|---|
|
|
196
|
+
| `accent-bar` | Required first child — renders in hot pink via `var(--primary)` |
|
|
197
|
+
| `orb` | Required ambient decoration; 2–4 per slide using neon palette clashes (pink + cyan, lime + purple) |
|
|
198
|
+
| Scanlines | **Automatic** — the theme injects a fixed scanline overlay via `:root::after`. No JSX needed. |
|
|
199
|
+
| Rainbow `<hr>` | Use `<hr />` in JSX — theme styles it as a 4-stop neon gradient (pink → lime → cyan → purple) |
|
|
200
|
+
| `✘` bullet markers | Use `<ul><li>` — theme replaces default bullets with hot-pink ✘ |
|
|
201
|
+
| Heading text-shadows | **Automatic** — `h1` gets offset lime + cyan shadows; `h2` gets pink shadow. No extra CSS needed. |
|
|
202
|
+
| Wavy links | **Automatic** — `<a>` tags get lime wavy underlines with cyan hover. No extra CSS needed. |
|
|
203
|
+
| `grid-dots` | Optional — subtle dot-grid pattern using `var(--dot-color)` |
|
|
204
|
+
| Card top rainbow stripe | Apply via `.card::before` — 4-stop gradient matching `<hr>` |
|
|
205
|
+
| Neon box-shadow | Use `var(--shadow-elevated)` for pink + lime dual-glow lift |
|
|
206
|
+
|
|
207
|
+
## Available components
|
|
208
|
+
|
|
209
|
+
| Resource | Import path |
|
|
210
|
+
|---|---|
|
|
211
|
+
| `Slide`, `BottomBar`, `Navigation`, `SlideProvider`, `useSlides`, `GenericThankYouSlide` | `'@deckio/deck-engine'` |
|
|
212
|
+
| Data / logos | `'../data/<file>'` |
|
|
213
|
+
|
|
214
|
+
## Anti-patterns
|
|
215
|
+
|
|
216
|
+
1. **Rounded corners** — `border-radius` above `4px` violates the sharp-edge punk identity. Never use `--radius-lg: 16px` patterns from other themes.
|
|
217
|
+
2. **Missing `accent-bar`** — every slide must have it as the first child.
|
|
218
|
+
3. **Missing orb decoration** — use 2–4 orbs with clashing neon colors.
|
|
219
|
+
4. **Missing `content-frame content-gutter`** — body wrapper must use these globals.
|
|
220
|
+
5. **Missing `BottomBar`** — required as the last child.
|
|
221
|
+
6. **Clean / editorial / corporate style** — never use shadcn's minimal editorial aesthetic, calm whitespace, or restrained color palettes. This theme is the opposite of tasteful restraint.
|
|
222
|
+
7. **Subtle borders** — borders should be visible and neon (`2px solid var(--border)`), not hairline or muted.
|
|
223
|
+
8. **Slow transitions** — everything snaps. Never use transitions above `0.3s`. Prefer `var(--transition-fast)` (0.08s).
|
|
224
|
+
9. **Lowercase headings** — the theme forces `text-transform: uppercase` on headings. Don't fight it with `text-transform: none`.
|
|
225
|
+
10. **Serif or neutral fonts** — the theme uses Bebas Neue + Space Mono. Don't import or specify other font families.
|
|
226
|
+
11. **Single-color schemes** — punk thrives on clash. Always use at least 2–3 neon colors from the decorative palette per slide.
|
|
227
|
+
12. **Importing shadcn UI components** — this is a `default` design-system theme; shadcn components are incompatible.
|
|
228
|
+
|
|
229
|
+
## Example slide direction
|
|
230
|
+
|
|
231
|
+
A strong funky-punk slide slams a massive uppercase Bebas Neue heading (with automatic neon text-shadow) over a jet-black canvas peppered with clashing pink and cyan orbs. Content cards sit in sharp-edged boxes with hot-pink borders and rainbow top-stripes. The scanline overlay adds CRT texture. Everything feels like a screen-printed concert poster: loud, layered, unapologetic. Readable from across the room because contrast is maxed out and type is enormous.
|