@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/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.