|
| 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