Skip to content

Commit ec600a9

Browse files
committed
feat(skills): add openkb-deck-neon — dark Aurora Glass deck skill
A neon / glassmorphism deck visual direction parallel to openkb-deck-editorial: near-black canvas, teal/sky/magenta accents, aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that letterbox-fills any viewport (no fixed 1280px card). Reuses the existing deck engine and grammar (od.mode: deck) — no code changes. Invoke with: openkb deck new <name> "<intent>" --skill openkb-deck-neon
1 parent 293783b commit ec600a9

1 file changed

Lines changed: 226 additions & 0 deletions

File tree

‎skills/openkb-deck-neon/SKILL.md‎

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
---
2+
name: openkb-deck-neon
3+
description: |
4+
Use when the user asks the openkb chat to make a deck / slide presentation /
5+
PPT / slides / 演示稿 / 幻灯片 from their compiled KB content AND wants a
6+
dark, high-tech, neon / glow / glassmorphism look (赛博 / 科技风 / 暗色 /
7+
霓虹 / 炫酷). Generates a polished single-file HTML deck in the Aurora Glass
8+
visual direction (near-black background, teal/sky/magenta/amber neon accents,
9+
glassmorphism panels, aurora gradient atmosphere) — opened in a browser,
10+
full-screened, shared. For the warm, printed, serif look use
11+
openkb-deck-editorial instead. Does NOT apply to generating skills
12+
(`openkb skill new`), research reports, or scrolling long-form documents.
13+
od:
14+
mode: deck
15+
output_path_template: "output/decks/{slug}/index.html"
16+
deck_grammar:
17+
kind_attr: data-type
18+
required: [cover, closing]
19+
allowed: [cover, chapter, thesis, quote, compare, data, closing]
20+
min_distinct: 4
21+
max_consecutive_same: 2
22+
---
23+
24+
# Aurora Glass deck skill
25+
26+
You are designing a presentation, not writing a research report. Each slide
27+
carries one idea. In this visual direction, **light, color and glow** organize
28+
the slide — dark canvas holds it, neon points the eye, glass adds depth.
29+
30+
## How this skill is invoked
31+
32+
The user typed something like "make a deck about X" (and asked for a dark /
33+
neon / 科技 look) inside `openkb chat`. You have wiki-read tools in your normal
34+
tool set, plus a `write_file` tool that can write under `output/**`, plus a
35+
tool to read this SKILL.md and files in `skills/openkb-deck-neon/` if needed.
36+
37+
Pick a kebab-case slug (e.g. `okf-pitch`) and write the output to
38+
`output/decks/<slug>/index.html`.
39+
40+
## Required output
41+
42+
Exactly one file: `output/decks/<slug>/index.html`.
43+
44+
It must be **self-contained**: NO external `<link rel="stylesheet">`, NO
45+
external `<script src>`, NO remote `<img>`, **and NO web fonts** (no Google
46+
Fonts link — that is an external link and breaks self-containment). All CSS in
47+
one inline `<style>`; the scale-to-fit script (§Frame) and keyboard-nav JS in
48+
one inline `<script>` at end of `<body>`. Use the local font stacks in §Type system — do not reach for Inter,
49+
Chakra Petch, Orbitron, or any `fonts.googleapis.com` import.
50+
51+
The body is a sequence of `<section class="slide" data-type="...">` blocks;
52+
each `data-type` is one of the 7 values in §Slide grammar. Keyboard nav:
53+
← / → move between slides, `F` toggles fullscreen, `P` triggers print.
54+
55+
## Design system: Aurora Glass
56+
57+
Use this fixed design system. Do not improvise nearby colors, do not add a
58+
fifth accent hue, do not bring in emojis. Glow and gradient are allowed here
59+
(unlike the editorial skill) — but they are seasoning, not the meal.
60+
61+
### Color palette
62+
63+
```css
64+
:root {
65+
--bg: #080b11; /* near-black blue — the canvas, never pure #000 */
66+
--bg-elev: #0f141d; /* raised surface / slide inner */
67+
--ink: #eef2f7; /* primary text — body copy uses THIS, not muted */
68+
--soft: #aeb8c7; /* secondary text */
69+
--muted: #69748a; /* labels / folio / metadata */
70+
--line: rgba(255,255,255,.09); /* hairline borders */
71+
--glass: rgba(255,255,255,.04); /* glassmorphism fill */
72+
--teal: #2dd4bf; /* PRIMARY accent */
73+
--sky: #38bdf8; /* secondary accent */
74+
--magenta: #e879f9; /* tertiary accent */
75+
--amber: #f6b94b; /* highlight / numbers-in-code only */
76+
}
77+
```
78+
79+
These 4 neon hues + the neutrals are the **only** colors. No purple-on-white
80+
gradients, no rainbow, no per-slide recoloring.
81+
82+
### Type system (local fonts only — NO web fonts)
83+
84+
```css
85+
--font-display: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
86+
"PingFang SC", "Microsoft YaHei", sans-serif; /* heavy weights */
87+
--font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas,
88+
monospace; /* labels, numbers, code, kickers */
89+
```
90+
91+
Display titles use `--font-display` at weight 800 with `letter-spacing:-.02em`.
92+
The tech character here comes from **mono for every label / number / kicker /
93+
code**, not from a fancy downloaded display face.
94+
95+
Type scale (size / line-height):
96+
* `--type-display`: 64px / 1.05 — cover/chapter big titles
97+
* `--type-title`: 40px / 1.12 — normal slide titles
98+
* `--type-body`: 19px / 1.6 — body copy (color: var(--ink))
99+
* `--type-quote`: 30px / 1.35 — pull quotes
100+
* `--type-label`: 11px / 1.0 / letter-spacing:.22em uppercase mono — tracks
101+
102+
### Atmosphere (fixed background layers on every slide)
103+
104+
1. **Aurora**: 3–4 blurred `radial-gradient`s in teal / sky / magenta / amber,
105+
low alpha (.10–.16), `filter: blur(14px)`. Positioned off the title.
106+
2. **Grain**: an inline SVG `feTurbulence` noise data-URI at `opacity:.04`
107+
(data-URI is inline, NOT an external image — allowed).
108+
3. Optional faint dot-grid via `radial-gradient` background, alpha < .06.
109+
110+
These three layers are what stop the dark background from looking flat/cheap.
111+
112+
### Frame (every slide)
113+
114+
* **Fixed 16:9 stage that scales to fill the viewport.** Author every slide at
115+
a fixed `1280×720` design size (so px-based type sizes stay predictable),
116+
then scale the WHOLE deck to fit the window — never cap it with `max-width`:
117+
```css
118+
html,body{height:100%;margin:0;overflow:hidden;background:var(--bg)}
119+
#stage{position:fixed;inset:0;display:grid;place-items:center}
120+
.slide{width:1280px;height:720px;transform-origin:center;display:none}
121+
.slide.active{display:flex} /* flex/grid inside as the layout needs */
122+
```
123+
```js
124+
const fit=()=>{const s=Math.min(innerWidth/1280,innerHeight/720);
125+
document.querySelectorAll('.slide').forEach(el=>el.style.transform=`scale(${s})`);};
126+
addEventListener('resize',fit); fit();
127+
```
128+
Result: the deck letterbox-fills ANY window size and fullscreen — never a
129+
small 1280px card stranded in a large viewport. One slide visible at a time;
130+
← / → swap the active slide (they do not scroll).
131+
* Padding: 64px top/bottom, 80px left/right.
132+
* **Visual signature:** a glowing 3px bar along the bottom edge, gradient
133+
`teal → sky → magenta`, with `box-shadow:0 0 14px` of --teal. This is the
134+
deck's signature — present on every slide.
135+
* Top label row (mono, --muted): left = chapter id ("CHAPTER 03"), right =
136+
source mark. Cover/closing use "OPENKB" on the left instead.
137+
* Bottom folio row (mono): left = `N / Total`, right = source short label.
138+
139+
### Glow & glass rules (read this — it is the #1 failure mode)
140+
141+
* **Glow only the protagonist** of a slide: the display title, the one big
142+
number, graph nodes. Body copy, labels, tables NEVER glow. A slide where
143+
everything glows reads as blurry mush.
144+
* Glass (`--glass` fill + `backdrop-filter:blur(8px)` + 1px --line border +
145+
subtle inset highlight) is for **compare columns and data cards only**.
146+
* Gradient text (teal→sky→magenta via `background-clip:text`) is reserved for
147+
cover / chapter / closing big titles and `data` numbers — not for body.
148+
149+
### Composition rules
150+
151+
* Cover/chapter titles: `max-width:18ch`; never wrap an article onto its own line.
152+
* `data` slides center the big number (`align-items:center; text-align:center`);
153+
all other types stay left-aligned.
154+
* Cover/closing bodies: `max-width:26em`.
155+
* Maintain contrast: body text is `--ink` on `--bg`. Never set body copy to
156+
`--muted`/`--soft` as its main color — it disappears on dark. (Exception:
157+
a `quote` slide's pull-quote is intentionally `--soft`, and `cover`/`closing`
158+
subtitles may use `--soft` — these are the only body exceptions.)
159+
160+
## Slide grammar (7 permitted `data-type` values)
161+
162+
| `data-type` | Use | Neon signature |
163+
|---|---|---|
164+
| `cover` | tag + huge gradient title + 1-line subtitle | strongest aurora; mono "OPENKB" top-left; gradient display title |
165+
| `chapter` | section divider: oversize number + name | number 120px mono, teal with glow; name 40px display |
166+
| `thesis` | one claim + short explanation | title fills ~60% height; ONE keyword in teal+glow; rest --ink |
167+
| `quote` | italic pull-quote + attribution | centered; left teal glowing vertical rule; quote in --soft |
168+
| `compare` | two-column comparison, 3–5 lines each | two glass panels; glowing teal vertical rule between them |
169+
| `data` | one number + label + one-line read | number 120–160px gradient+glow; micro-copy 12px mono |
170+
| `closing` | mirrors cover; thanks / next step | same scale as cover; aurora dims toward calm |
171+
172+
Cover/closing have no chapter context → top-left label is "OPENKB".
173+
174+
## Working method
175+
176+
1. **Survey first.** Use wiki-read tools to list `concepts/` and `summaries/`
177+
and read `wiki/index.md`. Build a mental map before deciding the argument.
178+
2. **Choose a narrative arc.** One-line thesis, then an 8–12 step arc. Each
179+
step → 1–2 slides, landing 8–15 slides total.
180+
3. **Read the relevant content.** For each concept the arc touches, read the
181+
concept page; for cited documents read a targeted slice. **The deck is only
182+
as expert as the source-reading you do here.** Generic restatements are a
183+
failure mode — name a specific technique, number, or quote on each slide.
184+
4. **Outline slides** with concrete `data-type` assignments. Vary types — ≥4
185+
distinct, no run of 3+ consecutive same type.
186+
5. **Write** `output/decks/<slug>/index.html` in one `write_file` call. Inline
187+
all CSS, inline keyboard-nav JS, inline `<svg>` for any graphics, inline
188+
noise as a data-URI. No external anything.
189+
6. **Revise** against §Failure modes; touch at least one slide if any match.
190+
7. **Self-check** the invariants below; fix anything failing.
191+
8. Report the deck path + a one-line summary of the arc.
192+
193+
## Failure modes (negative checklist)
194+
195+
1. **External fonts/assets** — any `fonts.googleapis.com`, `<script src>`,
196+
`<link>`, or remote `<img>`. Breaks self-containment AND the deck validator.
197+
Use the local stacks; the look does not depend on a downloaded font.
198+
2. **Glow soup** — more than the protagonist glowing. Body/labels/tables flat.
199+
3. **Low contrast** — body text in --muted/--soft on dark. Body is --ink.
200+
4. **Palette drift** — any hue outside teal/sky/magenta/amber + neutrals;
201+
purple-gradient-on-white; emoji; per-slide recoloring.
202+
5. **Bullet dump** — >5 bullets. Cut to 3 or restructure into compare/data.
203+
6. **Wall of text** — slide body >~80 words. Cut or split.
204+
7. **Visual monotony** — 3+ consecutive slides of one `data-type`.
205+
8. **Decorative-only viz** — an SVG/graph that says nothing. If you draw a
206+
graph, its nodes/edges must encode real concepts/links from the KB. In a
207+
16:9 slide prefer a small, exact, hand-placed SVG over a fake "force layout".
208+
9. **Generic titles** — "Introduction"/"Background". Titles carry content.
209+
10. **Definition-grade content** — "X is Y where Y is…" with no named
210+
technique, number, or source quote. Re-read sources (step 3) first.
211+
11. **Fixed-size card** — capping the deck with `max-width` so it sits as a
212+
small 1280px card in a big window. Use the scale-to-fit stage (§Frame) so
213+
it letterbox-fills any viewport and fullscreen.
214+
215+
## Self-check (before reporting back)
216+
217+
1. Does `output/decks/<slug>/index.html` exist with NO external
218+
`<link>`/`<script src>`/web-font import/remote `<img>`?
219+
2. At least one `data-type="cover"` and one `data-type="closing"`?
220+
3. Total slide count between 8 and 15?
221+
4. At least 4 distinct `data-type` values, no run of 3+ same?
222+
5. Is body copy in `--ink` (readable on dark) — `quote` pull-quotes and
223+
cover/closing subtitles in `--soft` being the only allowed exceptions — and
224+
is glow limited to titles / big numbers / graph nodes only?
225+
226+
If any answer is no, revise and re-run this self-check.

0 commit comments

Comments
 (0)