wand-kit 0.0.0-stage → 0.1.0
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/.gitkeep +0 -0
- package/PROMPT.md +252 -0
- package/SKILL.md +100 -0
- package/START-HERE.md +16 -0
- package/brands/current/assets/bg-cover-dark.png +0 -0
- package/brands/current/assets/bg-overlay-dark.png +0 -0
- package/brands/current/assets/bg-statement-dark.png +0 -0
- package/brands/current/assets/closing-art.png +0 -0
- package/brands/current/assets/cover-art.png +0 -0
- package/brands/current/assets/divider-art.png +0 -0
- package/brands/current/assets/glyphs/README.md +29 -0
- package/brands/current/assets/glyphs/activity.svg +15 -0
- package/brands/current/assets/glyphs/atom.svg +17 -0
- package/brands/current/assets/glyphs/badge-check.svg +16 -0
- package/brands/current/assets/glyphs/bell.svg +16 -0
- package/brands/current/assets/glyphs/blocks.svg +16 -0
- package/brands/current/assets/glyphs/book-open.svg +16 -0
- package/brands/current/assets/glyphs/bot.svg +20 -0
- package/brands/current/assets/glyphs/boxes.svg +26 -0
- package/brands/current/assets/glyphs/brain.svg +23 -0
- package/brands/current/assets/glyphs/briefcase.svg +16 -0
- package/brands/current/assets/glyphs/building-2.svg +21 -0
- package/brands/current/assets/glyphs/calendar.svg +18 -0
- package/brands/current/assets/glyphs/chart-column.svg +18 -0
- package/brands/current/assets/glyphs/chart-line.svg +16 -0
- package/brands/current/assets/glyphs/chart-pie.svg +16 -0
- package/brands/current/assets/glyphs/circle-check.svg +16 -0
- package/brands/current/assets/glyphs/clipboard-check.svg +17 -0
- package/brands/current/assets/glyphs/clock.svg +16 -0
- package/brands/current/assets/glyphs/cloud.svg +15 -0
- package/brands/current/assets/glyphs/code.svg +15 -0
- package/brands/current/assets/glyphs/coins.svg +18 -0
- package/brands/current/assets/glyphs/compass.svg +16 -0
- package/brands/current/assets/glyphs/cpu.svg +24 -0
- package/brands/current/assets/glyphs/database.svg +17 -0
- package/brands/current/assets/glyphs/eye.svg +16 -0
- package/brands/current/assets/glyphs/file-check.svg +17 -0
- package/brands/current/assets/glyphs/filter.svg +15 -0
- package/brands/current/assets/glyphs/fingerprint.svg +23 -0
- package/brands/current/assets/glyphs/flag.svg +16 -0
- package/brands/current/assets/glyphs/gauge.svg +16 -0
- package/brands/current/assets/glyphs/gavel.svg +19 -0
- package/brands/current/assets/glyphs/git-branch.svg +18 -0
- package/brands/current/assets/glyphs/globe.svg +17 -0
- package/brands/current/assets/glyphs/graduation-cap.svg +17 -0
- package/brands/current/assets/glyphs/handshake.svg +19 -0
- package/brands/current/assets/glyphs/hexagon.svg +15 -0
- package/brands/current/assets/glyphs/index.json +177 -0
- package/brands/current/assets/glyphs/infinity.svg +15 -0
- package/brands/current/assets/glyphs/key.svg +17 -0
- package/brands/current/assets/glyphs/landmark.svg +20 -0
- package/brands/current/assets/glyphs/layers.svg +17 -0
- package/brands/current/assets/glyphs/lightbulb.svg +17 -0
- package/brands/current/assets/glyphs/link.svg +16 -0
- package/brands/current/assets/glyphs/list-checks.svg +19 -0
- package/brands/current/assets/glyphs/lock.svg +16 -0
- package/brands/current/assets/glyphs/map.svg +17 -0
- package/brands/current/assets/glyphs/megaphone.svg +16 -0
- package/brands/current/assets/glyphs/message-square.svg +15 -0
- package/brands/current/assets/glyphs/milestone.svg +17 -0
- package/brands/current/assets/glyphs/network.svg +19 -0
- package/brands/current/assets/glyphs/orbit.svg +19 -0
- package/brands/current/assets/glyphs/package.svg +18 -0
- package/brands/current/assets/glyphs/plug.svg +18 -0
- package/brands/current/assets/glyphs/puzzle.svg +15 -0
- package/brands/current/assets/glyphs/radar.svg +22 -0
- package/brands/current/assets/glyphs/receipt.svg +17 -0
- package/brands/current/assets/glyphs/refresh-cw.svg +18 -0
- package/brands/current/assets/glyphs/rocket.svg +18 -0
- package/brands/current/assets/glyphs/route.svg +17 -0
- package/brands/current/assets/glyphs/scale.svg +19 -0
- package/brands/current/assets/glyphs/search.svg +16 -0
- package/brands/current/assets/glyphs/server.svg +18 -0
- package/brands/current/assets/glyphs/settings.svg +16 -0
- package/brands/current/assets/glyphs/share-2.svg +19 -0
- package/brands/current/assets/glyphs/shield-check.svg +16 -0
- package/brands/current/assets/glyphs/shuffle.svg +19 -0
- package/brands/current/assets/glyphs/sparkles.svg +19 -0
- package/brands/current/assets/glyphs/square-stack.svg +17 -0
- package/brands/current/assets/glyphs/target.svg +17 -0
- package/brands/current/assets/glyphs/trending-up.svg +16 -0
- package/brands/current/assets/glyphs/triangle-alert.svg +17 -0
- package/brands/current/assets/glyphs/trophy.svg +20 -0
- package/brands/current/assets/glyphs/users.svg +18 -0
- package/brands/current/assets/glyphs/wallet.svg +16 -0
- package/brands/current/assets/glyphs/wand-sparkles.svg +22 -0
- package/brands/current/assets/glyphs/workflow.svg +17 -0
- package/brands/current/assets/glyphs/zap.svg +15 -0
- package/brands/current/assets/mark-dark.png +0 -0
- package/brands/current/assets/mark-white.png +0 -0
- package/brands/current/assets/orb-cover.png +0 -0
- package/brands/current/assets/orb-glow.png +0 -0
- package/brands/current/assets/wordmark-dark.png +0 -0
- package/brands/current/assets/wordmark-white.png +0 -0
- package/brands/current/fonts/Geist-Bold.ttf +0 -0
- package/brands/current/fonts/Geist-BoldItalic.ttf +0 -0
- package/brands/current/fonts/Geist-ExtraBold.ttf +0 -0
- package/brands/current/fonts/Geist-ExtraBoldItalic.ttf +0 -0
- package/brands/current/fonts/Geist-Italic.ttf +0 -0
- package/brands/current/fonts/Geist-Light.ttf +0 -0
- package/brands/current/fonts/Geist-LightItalic.ttf +0 -0
- package/brands/current/fonts/Geist-Medium.ttf +0 -0
- package/brands/current/fonts/Geist-MediumItalic.ttf +0 -0
- package/brands/current/fonts/Geist-Regular.ttf +0 -0
- package/brands/current/fonts/Geist-SemiBold.ttf +0 -0
- package/brands/current/fonts/Geist-SemiBoldItalic.ttf +0 -0
- package/brands/current/lib/glyphs.js +87 -0
- package/brands/current/lib/measure.js +115 -0
- package/brands/current/lib/pdf.js +603 -0
- package/brands/current/lib/ttf.py +167 -0
- package/brands/current/lib/wandxml.py +37 -0
- package/brands/current/tokens.json +206 -0
- package/brands/next/assets/closing-art.png +0 -0
- package/brands/next/assets/cover-art.png +0 -0
- package/brands/next/assets/divider-art.png +0 -0
- package/brands/next/assets/glyphs/README.md +29 -0
- package/brands/next/assets/glyphs/activity.svg +15 -0
- package/brands/next/assets/glyphs/atom.svg +17 -0
- package/brands/next/assets/glyphs/badge-check.svg +16 -0
- package/brands/next/assets/glyphs/bell.svg +16 -0
- package/brands/next/assets/glyphs/blocks.svg +16 -0
- package/brands/next/assets/glyphs/book-open.svg +16 -0
- package/brands/next/assets/glyphs/bot.svg +20 -0
- package/brands/next/assets/glyphs/boxes.svg +26 -0
- package/brands/next/assets/glyphs/brain.svg +23 -0
- package/brands/next/assets/glyphs/briefcase.svg +16 -0
- package/brands/next/assets/glyphs/building-2.svg +21 -0
- package/brands/next/assets/glyphs/calendar.svg +18 -0
- package/brands/next/assets/glyphs/chart-column.svg +18 -0
- package/brands/next/assets/glyphs/chart-line.svg +16 -0
- package/brands/next/assets/glyphs/chart-pie.svg +16 -0
- package/brands/next/assets/glyphs/circle-check.svg +16 -0
- package/brands/next/assets/glyphs/clipboard-check.svg +17 -0
- package/brands/next/assets/glyphs/clock.svg +16 -0
- package/brands/next/assets/glyphs/cloud.svg +15 -0
- package/brands/next/assets/glyphs/code.svg +15 -0
- package/brands/next/assets/glyphs/coins.svg +18 -0
- package/brands/next/assets/glyphs/compass.svg +16 -0
- package/brands/next/assets/glyphs/cpu.svg +24 -0
- package/brands/next/assets/glyphs/database.svg +17 -0
- package/brands/next/assets/glyphs/eye.svg +16 -0
- package/brands/next/assets/glyphs/file-check.svg +17 -0
- package/brands/next/assets/glyphs/filter.svg +15 -0
- package/brands/next/assets/glyphs/fingerprint.svg +23 -0
- package/brands/next/assets/glyphs/flag.svg +16 -0
- package/brands/next/assets/glyphs/gauge.svg +16 -0
- package/brands/next/assets/glyphs/gavel.svg +19 -0
- package/brands/next/assets/glyphs/git-branch.svg +18 -0
- package/brands/next/assets/glyphs/globe.svg +17 -0
- package/brands/next/assets/glyphs/graduation-cap.svg +17 -0
- package/brands/next/assets/glyphs/handshake.svg +19 -0
- package/brands/next/assets/glyphs/hexagon.svg +15 -0
- package/brands/next/assets/glyphs/index.json +177 -0
- package/brands/next/assets/glyphs/infinity.svg +15 -0
- package/brands/next/assets/glyphs/key.svg +17 -0
- package/brands/next/assets/glyphs/landmark.svg +20 -0
- package/brands/next/assets/glyphs/layers.svg +17 -0
- package/brands/next/assets/glyphs/lightbulb.svg +17 -0
- package/brands/next/assets/glyphs/link.svg +16 -0
- package/brands/next/assets/glyphs/list-checks.svg +19 -0
- package/brands/next/assets/glyphs/lock.svg +16 -0
- package/brands/next/assets/glyphs/map.svg +17 -0
- package/brands/next/assets/glyphs/megaphone.svg +16 -0
- package/brands/next/assets/glyphs/message-square.svg +15 -0
- package/brands/next/assets/glyphs/milestone.svg +17 -0
- package/brands/next/assets/glyphs/network.svg +19 -0
- package/brands/next/assets/glyphs/orbit.svg +19 -0
- package/brands/next/assets/glyphs/package.svg +18 -0
- package/brands/next/assets/glyphs/plug.svg +18 -0
- package/brands/next/assets/glyphs/puzzle.svg +15 -0
- package/brands/next/assets/glyphs/radar.svg +22 -0
- package/brands/next/assets/glyphs/receipt.svg +17 -0
- package/brands/next/assets/glyphs/refresh-cw.svg +18 -0
- package/brands/next/assets/glyphs/rocket.svg +18 -0
- package/brands/next/assets/glyphs/route.svg +17 -0
- package/brands/next/assets/glyphs/scale.svg +19 -0
- package/brands/next/assets/glyphs/search.svg +16 -0
- package/brands/next/assets/glyphs/server.svg +18 -0
- package/brands/next/assets/glyphs/settings.svg +16 -0
- package/brands/next/assets/glyphs/share-2.svg +19 -0
- package/brands/next/assets/glyphs/shield-check.svg +16 -0
- package/brands/next/assets/glyphs/shuffle.svg +19 -0
- package/brands/next/assets/glyphs/sparkles.svg +19 -0
- package/brands/next/assets/glyphs/square-stack.svg +17 -0
- package/brands/next/assets/glyphs/target.svg +17 -0
- package/brands/next/assets/glyphs/trending-up.svg +16 -0
- package/brands/next/assets/glyphs/triangle-alert.svg +17 -0
- package/brands/next/assets/glyphs/trophy.svg +20 -0
- package/brands/next/assets/glyphs/users.svg +18 -0
- package/brands/next/assets/glyphs/wallet.svg +16 -0
- package/brands/next/assets/glyphs/wand-sparkles.svg +22 -0
- package/brands/next/assets/glyphs/workflow.svg +17 -0
- package/brands/next/assets/glyphs/zap.svg +15 -0
- package/brands/next/assets/layers-dark.png +0 -0
- package/brands/next/assets/layers-light.png +0 -0
- package/brands/next/assets/ornaments/burst-dark.png +0 -0
- package/brands/next/assets/ornaments/burst-light.png +0 -0
- package/brands/next/assets/ornaments/chain-dark.png +0 -0
- package/brands/next/assets/ornaments/chain-light.png +0 -0
- package/brands/next/assets/ornaments/coil-dark.png +0 -0
- package/brands/next/assets/ornaments/coil-light.png +0 -0
- package/brands/next/assets/ornaments/cone-dark.png +0 -0
- package/brands/next/assets/ornaments/cone-light.png +0 -0
- package/brands/next/assets/ornaments/diamond-dark.png +0 -0
- package/brands/next/assets/ornaments/diamond-light.png +0 -0
- package/brands/next/assets/ornaments/fan-dark.png +0 -0
- package/brands/next/assets/ornaments/fan-light.png +0 -0
- package/brands/next/assets/ornaments/globe-dark.png +0 -0
- package/brands/next/assets/ornaments/globe-light.png +0 -0
- package/brands/next/assets/ornaments/orbit-dark.png +0 -0
- package/brands/next/assets/ornaments/orbit-light.png +0 -0
- package/brands/next/assets/ornaments/rings-dark.png +0 -0
- package/brands/next/assets/ornaments/rings-light.png +0 -0
- package/brands/next/assets/ornaments/sphere-dark.png +0 -0
- package/brands/next/assets/ornaments/sphere-light.png +0 -0
- package/brands/next/assets/ornaments/sun-dark.png +0 -0
- package/brands/next/assets/ornaments/sun-light.png +0 -0
- package/brands/next/assets/photos/atrium.jpg +0 -0
- package/brands/next/assets/photos/cantilever.jpg +0 -0
- package/brands/next/assets/photos/corridor.jpg +0 -0
- package/brands/next/assets/photos/dome.jpg +0 -0
- package/brands/next/assets/photos/facade.jpg +0 -0
- package/brands/next/assets/photos/glass.jpg +0 -0
- package/brands/next/assets/photos/stairs.jpg +0 -0
- package/brands/next/assets/photos/tower.jpg +0 -0
- package/brands/next/assets/photos/walk.jpg +0 -0
- package/brands/next/assets/spark-gold.png +0 -0
- package/brands/next/assets/statement-art.png +0 -0
- package/brands/next/assets/wordmark-dark.png +0 -0
- package/brands/next/assets/wordmark-light.png +0 -0
- package/brands/next/assets/wordmark.svg +7 -0
- package/brands/next/fonts/FKRomanStandard-Light.ttf +0 -0
- package/brands/next/fonts/OFL-OverusedGrotesk.txt +93 -0
- package/brands/next/fonts/OverusedGrotesk-Italic.ttf +0 -0
- package/brands/next/fonts/OverusedGrotesk-Medium.ttf +0 -0
- package/brands/next/fonts/OverusedGrotesk-MediumItalic.ttf +0 -0
- package/brands/next/fonts/OverusedGrotesk-Roman.ttf +0 -0
- package/brands/next/fonts/OverusedGrotesk-SemiBold.ttf +0 -0
- package/brands/next/fonts/OverusedGrotesk-SemiBoldItalic.ttf +0 -0
- package/brands/next/fonts/faces.json +27 -0
- package/brands/next/lib/glyphs.js +89 -0
- package/brands/next/lib/measure.js +121 -0
- package/brands/next/lib/pdf.js +597 -0
- package/brands/next/lib/ttf.py +169 -0
- package/brands/next/lib/wandxml.py +37 -0
- package/brands/next/tokens.json +174 -0
- package/examples/gallery/job.mjs +81 -0
- package/examples/overview/job.mjs +99 -0
- package/lib/brand.js +115 -0
- package/lib/components.js +313 -0
- package/lib/content.js +66 -0
- package/lib/engine.js +280 -0
- package/lib/html_export.js +71 -0
- package/lib/pptx.js +446 -0
- package/lib/surfaces.js +62 -0
- package/package.json +17 -4
- package/templates/card.mjs +30 -0
- package/templates/page.mjs +52 -0
- package/templates/slide.mjs +46 -0
- package/tools/embed_fonts.py +154 -0
- package/wand.js +175 -0
- package/README.md +0 -3
package/.gitkeep
ADDED
|
File without changes
|
package/PROMPT.md
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# Wand Power Prompt — Studio (v0.1)
|
|
2
|
+
|
|
3
|
+
One design surface for every material a sales or marketing team needs, on
|
|
4
|
+
either Wand brand. The page is HTML; it is composed from a component library on
|
|
5
|
+
brand tokens; Chromium renders it; every gate measures that render; and every
|
|
6
|
+
export (PDF, PNG, PowerPoint, a one-file HTML) is read from it, so nothing can
|
|
7
|
+
drift from what was reviewed on screen.
|
|
8
|
+
|
|
9
|
+
This document is the design system and the pipeline, and the source of truth
|
|
10
|
+
on every design question. `brand/BRAND.md` and `brand-next/BRAND.md` win on
|
|
11
|
+
values (a hex, a face, an asset); `STATUS.md` is state; `SKILL.md` is procedure.
|
|
12
|
+
|
|
13
|
+
**Why this exists.** The outputs that reviewed best in October 2026 (the
|
|
14
|
+
Franklin Templeton case study, the aviation overview, the BofA talk) were all
|
|
15
|
+
hand-written HTML outside the kits: brand fonts and art through `brand.js`, a
|
|
16
|
+
palette, free composition, two gates. The form-filling kits (44 slide layouts,
|
|
17
|
+
26 document blocks) guaranteed correctness and could not supply composition.
|
|
18
|
+
This kit keeps the freedom and systematises the rest: tokens, surfaces,
|
|
19
|
+
components, gates, exports.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 0. Ground truth
|
|
24
|
+
|
|
25
|
+
Two brands, one component set.
|
|
26
|
+
|
|
27
|
+
| Brand | Directory | Faces | Guideline |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `current` | `brand/` | Geist | the Kearney leadership deck; `brand/BRAND.md` |
|
|
30
|
+
| `next` | `brand-next/` | FK Roman Standard Light, Overused Grotesk | the website, read 2026-10-05; `brand-next/BRAND.md` |
|
|
31
|
+
|
|
32
|
+
Each directory's `tokens.json` carries the brand as values a kit can draw with:
|
|
33
|
+
`swatch` (the measured hexes), `roles` (what each value is for, once per
|
|
34
|
+
ground), `faces` (the files and their PowerPoint names), `shape` (radius,
|
|
35
|
+
strokes) and `art` (which file plays which role). A component asks for a role
|
|
36
|
+
(`--ink`, `--accent`, `--emph`) and never for a hex. Where a hex in
|
|
37
|
+
`tokens.json` and `BRAND.md` differ, `BRAND.md` is right and `tokens.json` has
|
|
38
|
+
drifted.
|
|
39
|
+
|
|
40
|
+
The new brand is for internal testing until the FK Roman Standard licence for
|
|
41
|
+
documents is settled (`brand-next/fonts/LICENSE-FONTS.md`).
|
|
42
|
+
|
|
43
|
+
## 1. Surfaces — locked
|
|
44
|
+
|
|
45
|
+
A surface fixes the frame, the margins, where the chrome sits, the type scale
|
|
46
|
+
and the minimum type size. Nothing else. `kit/lib/surfaces.js` is the table.
|
|
47
|
+
|
|
48
|
+
| Surface | Canvas (px) | Content box | Base | Min type | For |
|
|
49
|
+
|---|---|---|---|---|---|
|
|
50
|
+
| `letter` | 816 × 1056 | 60 / 92 / 60 / 74 | 11.6px | 7px | documents, one- and two-pagers, case studies |
|
|
51
|
+
| `a4` | 794 × 1123 | as letter | 11.6px | 7px | the same, for Europe |
|
|
52
|
+
| `slide` | 1920 × 1080 | 72 / 178 / 72 / 112 | 21px | 13px | decks, talks |
|
|
53
|
+
| `square` | 1080 × 1080 | 72 / 150 / 72 / 120 | 22px | 14px | social cards |
|
|
54
|
+
| `og` | 1200 × 630 | 64 / 120 / 64 / 90 | 20px | 13px | link previews, banners |
|
|
55
|
+
|
|
56
|
+
The letter scale is the Franklin Templeton letter's; the slide scale is its
|
|
57
|
+
deck's. A letter page is read at 96 px/in, a slide at 192 px/in (10 in wide).
|
|
58
|
+
|
|
59
|
+
**Chrome on every page:** the tag and eyebrow top left (`TAG | Section`), the
|
|
60
|
+
mark top right, the footer with the running line and the page number. A page
|
|
61
|
+
may drop it (`chrome: false`) only on a social card.
|
|
62
|
+
|
|
63
|
+
## 2. Colour
|
|
64
|
+
|
|
65
|
+
Roles, per ground. A page is `light` or `dark`; the same role names resolve to
|
|
66
|
+
the ground's values, so one component draws on both.
|
|
67
|
+
|
|
68
|
+
| Role | Light (current) | Dark (current) | Use |
|
|
69
|
+
|---|---|---|---|
|
|
70
|
+
| `bg` | F8F6FB | 240F48 | the ground |
|
|
71
|
+
| `paper` | FFFFFF | 291D5A | cards, nodes, chips |
|
|
72
|
+
| `ink` | 1D1A33 | FFFFFF | titles, values |
|
|
73
|
+
| `text` | 5C5779 | F5F5F5 | running text |
|
|
74
|
+
| `soft` / `muted` | 555077 / 999999 | BBBBBB / 746B98 | small print / chrome |
|
|
75
|
+
| `accent` | 8B7CF6 | 9481FF | anything drawn: meters, dots, arrows |
|
|
76
|
+
| `accentText` | 6C5CE7 | 9481FF | the accent phrase in a title, outcomes, deltas |
|
|
77
|
+
| `label` | 6C5CE7 | A78BFA | tags, section numbers |
|
|
78
|
+
| `emph` / `emphInk` / `emphText` / `emphAccent` | 251C63 / FFF / DCD6F5 / AA9BFF | 4D2E8C / FFF / DCD6F5 / C4B5F4 | the emphasis card and what sits on it |
|
|
79
|
+
| `stroke` / `rule` / `track` / `surface` | E4E0F2 / E4E0F2 / E9E6F5 / EBE8F8 | 5B4BB0 / 3A2E63 / 1A1033 / 1A1033 | card strokes, hairlines, meter tracks, tiles |
|
|
80
|
+
|
|
81
|
+
The next brand fills the same roles from the website (gold the one accent,
|
|
82
|
+
violets as grounds, beige as paper); see `brand-next/tokens.json`.
|
|
83
|
+
|
|
84
|
+
**Rules.**
|
|
85
|
+
- One accent. The accent phrase in a title is the single most recognisable
|
|
86
|
+
device in the system: one per title, never two, the sentence period in ink.
|
|
87
|
+
- One emphasis card per row, at most one or two per page.
|
|
88
|
+
- Light pages carry no art. Dark pages carry art on the cover, the closing and
|
|
89
|
+
a statement; a dark content page is flat.
|
|
90
|
+
- A job may declare a client's own colours as a `theme` (role overrides and
|
|
91
|
+
`extra` hexes). The brand gate then reports them as declared, so a client
|
|
92
|
+
look is a decision on record rather than a hex that slipped in.
|
|
93
|
+
|
|
94
|
+
## 3. Typography
|
|
95
|
+
|
|
96
|
+
Three face roles per brand: `display` (titles, figures, the lockup), `body`
|
|
97
|
+
(everything read), `label` (tags, eyebrows, table heads, chips' numerals).
|
|
98
|
+
Tracking and leading travel with the face in `tokens.json`; the CSS sets them
|
|
99
|
+
from the same values.
|
|
100
|
+
|
|
101
|
+
| Role | current | next |
|
|
102
|
+
|---|---|---|
|
|
103
|
+
| display | Geist SemiBold, −0.02em | FK Roman Standard Light, −0.07em, 1.06 |
|
|
104
|
+
| body | Geist Regular | Overused Grotesk, −0.02em |
|
|
105
|
+
| label | Geist SemiBold, +0.18em, caps | FK Roman Standard Light, caps |
|
|
106
|
+
|
|
107
|
+
**Weight carries no hierarchy on the next brand** (the serif ships one weight);
|
|
108
|
+
the face does. Components therefore never rely on bold to separate levels, and
|
|
109
|
+
`strong` is 600 on the body face only.
|
|
110
|
+
|
|
111
|
+
**The scale is the surface's** (`--t-h1` … `--t-note`), so a component sets
|
|
112
|
+
`font-size: var(--t-h3)` and lands right on every surface. Nothing under the
|
|
113
|
+
surface's minimum; the type gate fails the build otherwise.
|
|
114
|
+
|
|
115
|
+
Figures are tabular (`font-variant-numeric: tabular-nums` on the page).
|
|
116
|
+
|
|
117
|
+
## 4. Chrome
|
|
118
|
+
|
|
119
|
+
Drawn by `c.page()` on every page: eyebrow (`job.tag | eyebrow`), mark, footer
|
|
120
|
+
(`job.footer`, page number). The cover and closing pages are `c.cover()` and
|
|
121
|
+
`c.closing()`, which place the brand art and the lockup; a job gives them
|
|
122
|
+
words, never styling. Every piece of chrome is `.deco` or chrome-classed, so
|
|
123
|
+
the gates know what is content and what is frame.
|
|
124
|
+
|
|
125
|
+
## 5. Catalog
|
|
126
|
+
|
|
127
|
+
The components (`node wand.js components`; `kit/lib/components.js`):
|
|
128
|
+
|
|
129
|
+
| Component | For |
|
|
130
|
+
|---|---|
|
|
131
|
+
| `page`, `cover`, `closing` | the three page kinds |
|
|
132
|
+
| `sec(num, title)` | a numbered section heading; the title carries the accent phrase |
|
|
133
|
+
| `lead`, `body`, `small`, `note`, `tag` | the type roles |
|
|
134
|
+
| `cols(n, items)` | a grid of 2 to 5, or `12` / `21` for a 1.35 : 1 split |
|
|
135
|
+
| `card({ tag, title, body, out, emph })` | the card, the emphasis card, the function card with its outcome line |
|
|
136
|
+
| `strip(labels, { on })`, `chip`, `phase(i, label, line)` | the journey: numbered chips with arrows, the chip-then-heading row |
|
|
137
|
+
| `flow({ label, nodes, note })` | the five-node tool-vs-labor flow |
|
|
138
|
+
| `table({ head, rows, emph })` | ruled tables; a cell with `meter: true` draws its bar |
|
|
139
|
+
| `quote({ text, by, emph })`, `who` | testimonial cards, name over role, no photographs |
|
|
140
|
+
| `stats`, `delta(from, to)` | figures, before-and-after |
|
|
141
|
+
| `steps(items)` | next steps with arrows |
|
|
142
|
+
| `callout`, `list`, `chapter`, `img`, `icon`, `tile` | the rest |
|
|
143
|
+
|
|
144
|
+
**Composition is free.** A job writes the markup it needs from these, adds its
|
|
145
|
+
own CSS on top (custom properties only) and may write raw markup where no
|
|
146
|
+
component fits. Recipes, not forms: `templates/` and `examples/` are starting
|
|
147
|
+
points to copy from, not fields to fill. The things the catalogue does not
|
|
148
|
+
decide, and that make or break a page:
|
|
149
|
+
|
|
150
|
+
- **An argument per page.** Before any markup, one line per page saying what
|
|
151
|
+
the page claims. A document that passes every gate and "spreads information
|
|
152
|
+
with no story" (the aviation round-1 verdict) fails here.
|
|
153
|
+
- **Three sections a page, not four.** The cramped first pass of the aviation
|
|
154
|
+
overview had four; the accepted one had three.
|
|
155
|
+
- **Separate with alignment, hairlines and type, not boxes.** Cards are for
|
|
156
|
+
things that are a set (layers, functions, steps); running text sits on the
|
|
157
|
+
ground.
|
|
158
|
+
- **Short lines in cards.** One sentence and an outcome. The card's body is
|
|
159
|
+
never the place for the argument.
|
|
160
|
+
- **Equal heights in a row** (`stretch`), titles at one height, and the empty
|
|
161
|
+
space at the foot of a page shared by its sections, never left under one.
|
|
162
|
+
|
|
163
|
+
## 6. Pipeline
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
new ─▶ argue ─▶ content ─▶ compose ─▶ build ─▶ review ─▶ ship
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
1. **new** — `node wand.js new <dir> --surface letter --brand current`. A job
|
|
170
|
+
folder: `job.mjs`, `content.txt`.
|
|
171
|
+
2. **argue** — the page list with one claim per page, in the chat, before any
|
|
172
|
+
markup. For a rebuild, the mapping from source pages to it.
|
|
173
|
+
3. **content** — for a rebuild, the source's strings into `content.txt`, one
|
|
174
|
+
per line, verbatim (`tools/extract.py` from the decks or docs kit, or
|
|
175
|
+
`pdftotext`). Every departure declared in `edits`; every line left out in
|
|
176
|
+
`cut`. For authored copy, no file.
|
|
177
|
+
4. **compose** — `pages(c)`. Lines by number (`c.L(12)`), components, job CSS.
|
|
178
|
+
5. **build** — `node wand.js build <job>`: the gates (§7), then the PDF, a PNG
|
|
179
|
+
per page, the contact sheet. `watch` does this on every save in under a
|
|
180
|
+
second with the browser kept warm.
|
|
181
|
+
6. **review** — look at `out/sheet.png`, then at any page the gates named.
|
|
182
|
+
Read the pages as the reader will: does each carry its claim?
|
|
183
|
+
7. **ship** — `node wand.js ship <job> [--pptx]`: the build, the one-file HTML,
|
|
184
|
+
the PowerPoint. The review note says what was changed from the source and
|
|
185
|
+
why, which gates ran, and what a human still has to decide.
|
|
186
|
+
|
|
187
|
+
## 7. Gates — every build, every job
|
|
188
|
+
|
|
189
|
+
| Gate | Fails when | Blind to |
|
|
190
|
+
|---|---|---|
|
|
191
|
+
| fit | anything in the content box runs past it, under the footer, or off the sides | a page that fits and reads badly |
|
|
192
|
+
| coverage | a line of `content.txt` is not on the page (whole, or in its declared parts), less the `cut` lines | a line that is present and in the wrong place |
|
|
193
|
+
| overlap | one text box sits on another | text on art |
|
|
194
|
+
| brand | a computed colour, border or fill that is not a token or a declared theme colour | gradients and images |
|
|
195
|
+
| fonts | a text run not in the brand's faces | a weight the face lacks (the browser synthesises) |
|
|
196
|
+
| type | text under the surface's minimum size | |
|
|
197
|
+
| dashes | an em dash reaches a page (JP Sacy, Oct 2026: a GPT marker) | |
|
|
198
|
+
| names | a denied name (a previous client's) is on a page | |
|
|
199
|
+
| pdf text | the PDF's text misses a line, or carries an em dash | |
|
|
200
|
+
| contrast (warn) | text under WCAG AA against its background, chrome excepted | |
|
|
201
|
+
| measure (warn) | a paragraph over the surface's characters-per-line | |
|
|
202
|
+
| console | a page error | |
|
|
203
|
+
|
|
204
|
+
The gates read the DOM Chromium laid out for the PDF; nothing is inferred from
|
|
205
|
+
the spec. What no gate sees: the argument, the pacing, and whether the right
|
|
206
|
+
component was chosen. That is the review.
|
|
207
|
+
|
|
208
|
+
## 8. Content rules
|
|
209
|
+
|
|
210
|
+
- **Verbatim for a rebuild.** Reflowing is fine; rewording is not. Every
|
|
211
|
+
departure is an `edit` with the needle and the replacement, so the review
|
|
212
|
+
note can list it and coverage still passes.
|
|
213
|
+
- **No em dashes** in anything generated: a comma or a semicolon, a colon
|
|
214
|
+
before a list. For a source that has them, declare the swaps as edits.
|
|
215
|
+
- **No photographs of people** in sales material without consent on file. The
|
|
216
|
+
`quote` component sets name over role and nothing else.
|
|
217
|
+
- **A client's confidential detail** (a vendor they use, a figure they have not
|
|
218
|
+
published) does not travel into a generic piece. The `denylist` catches a
|
|
219
|
+
name; the review catches the rest.
|
|
220
|
+
- **Figures are sourced on the day** and dated on the page.
|
|
221
|
+
|
|
222
|
+
## 9. Environment gotchas
|
|
223
|
+
|
|
224
|
+
- **The browser.** The kit renders with Chromium. `findChrome()` looks at
|
|
225
|
+
`WAND_CHROME`, Playwright's own cache, then the system. In a sandbox without
|
|
226
|
+
one, `doctor` says so and nothing renders: there is no browser-free fallback
|
|
227
|
+
in this kit.
|
|
228
|
+
- **LibreOffice** substitutes faces and widens text; it is a geometry check for
|
|
229
|
+
the PowerPoint export, never a judge of fit.
|
|
230
|
+
- **Google Slides and Keynote** ignore embedded fonts; the `.pptx` needs the
|
|
231
|
+
faces installed there.
|
|
232
|
+
- **iCloud** evicts files under `Documents/`; a build that hangs on a font is
|
|
233
|
+
usually that.
|
|
234
|
+
|
|
235
|
+
## 10. Known drift — don't propagate
|
|
236
|
+
|
|
237
|
+
- `brand/BRAND.md` keeps values in prose and `wand_kit.js` keeps a copy; this
|
|
238
|
+
kit reads `brand/tokens.json`, added 2026-10-16 from the same values.
|
|
239
|
+
- The Franklin Templeton case study shipped on colours sampled from the
|
|
240
|
+
client's own slides, not the brand's. Its studio regression declares them as
|
|
241
|
+
a theme; nothing in the components carries them.
|
|
242
|
+
|
|
243
|
+
## 11. Open items
|
|
244
|
+
|
|
245
|
+
1. **DOCX export.** Declined for now: Word cannot hold these pages. If needed,
|
|
246
|
+
a semantic export (headings, prose, tables) as an editable-text version,
|
|
247
|
+
labelled as such.
|
|
248
|
+
2. **The sandbox's browser.** Confirm Chromium is present where sellers work
|
|
249
|
+
before the kit replaces `decks` and `docs`.
|
|
250
|
+
3. **The chapter panel and the talk runtime** (presenter view, demos) from the
|
|
251
|
+
BofA deck: carry into the slide surface when a talk needs them.
|
|
252
|
+
4. **Email and banner surfaces**: declared in §1's spirit, not yet in the table.
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wand-studio
|
|
3
|
+
description: Design any Wand sales or marketing material on either brand - a deck, a document, a one-pager, a case study, social cards - as PDF, PowerPoint and one-file HTML, with gates. Use when a .pptx, .docx or .pdf is attached, or branded output is wanted from a brief.
|
|
4
|
+
compatibility: Requires Node.js 18+, code execution enabled in claude.ai (Settings > Features), and a Chromium the kit can find (Playwright's cache or the system). No network needed once installed. Python 3 embeds fonts in the .pptx; without it the deck ships with the faces named, not embedded.
|
|
5
|
+
license: Proprietary - Wand AI
|
|
6
|
+
metadata:
|
|
7
|
+
version: "0.1.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Wand studio
|
|
12
|
+
|
|
13
|
+
## First: find the kit and stand in it
|
|
14
|
+
|
|
15
|
+
1. **Installed from npm** (the usual way): it is at `node_modules/wand-kit/`.
|
|
16
|
+
If it is not there yet: `npm install wand-kit@next --no-audit --no-fund`.
|
|
17
|
+
2. **Attached to the chat as a zip**: unzip it and enter the folder it makes.
|
|
18
|
+
3. **You are already inside it**: `wand.js` is next to this file.
|
|
19
|
+
|
|
20
|
+
Then:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
node wand.js doctor
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Every row must be clear, and `chromium` must name a binary. If it does not,
|
|
27
|
+
**stop and say so**: nothing renders without a browser, and never report checks
|
|
28
|
+
you did not run. Every path below is relative to the kit folder.
|
|
29
|
+
|
|
30
|
+
## What this is
|
|
31
|
+
|
|
32
|
+
One HTML page per slide, sheet or card, composed from a component library on
|
|
33
|
+
the brand's tokens; Chromium renders it; every gate measures that render; the
|
|
34
|
+
PDF, the PNGs, the PowerPoint and the one-file HTML are all read from it.
|
|
35
|
+
`PROMPT.md` is the design system: read it once for design decisions, not per
|
|
36
|
+
page. `node wand.js components` lists the vocabulary.
|
|
37
|
+
|
|
38
|
+
Two brands: `current` (Geist, the default) and `next` (the website's; for
|
|
39
|
+
internal testing until its font licence is settled). Use `next` only when the
|
|
40
|
+
user says *new brand*, *new guidelines* or *website look*.
|
|
41
|
+
|
|
42
|
+
## Read only what the job needs
|
|
43
|
+
|
|
44
|
+
| Job | Read |
|
|
45
|
+
|---|---|
|
|
46
|
+
| A document, a two-pager, a case study | `PROMPT.md` §5 and `templates/page.mjs`; `examples/overview/job.mjs` for a finished one |
|
|
47
|
+
| A deck or a talk | §5 and `templates/slide.mjs` |
|
|
48
|
+
| Social cards, a banner | `templates/card.mjs` |
|
|
49
|
+
| Edit a job this kit built | the job's `job.mjs` only, then `build` |
|
|
50
|
+
|
|
51
|
+
## The jobs
|
|
52
|
+
|
|
53
|
+
### Rebuild from a source they attached (a .pptx, .docx, .pdf, .html)
|
|
54
|
+
|
|
55
|
+
1. Dump the source's strings verbatim, one per line, into `content.txt`:
|
|
56
|
+
`pdftotext -layout` for a PDF; for a .pptx or .docx, unzip and read the XML
|
|
57
|
+
text runs in order, or use the decks kit's `tools/extract.py` if present.
|
|
58
|
+
2. **Write the page list in the chat before any markup**: one line per page
|
|
59
|
+
with the claim it carries and which source lines it takes. Then compose.
|
|
60
|
+
3. `node wand.js new work/<name> --surface letter|slide --brand current`,
|
|
61
|
+
write `pages(c)` with `c.L(n)` for every string, declare every departure
|
|
62
|
+
in `edits` (no em dashes: swap them for commas or semicolons there) and
|
|
63
|
+
every line left out in `cut`.
|
|
64
|
+
4. `node wand.js build work/<name>/job.mjs` until every hard gate is ok. Look
|
|
65
|
+
at `out/sheet.png`. Open a page only where something looks off.
|
|
66
|
+
5. `node wand.js ship work/<name>/job.mjs --pptx` for a deck; without `--pptx`
|
|
67
|
+
for a document. Deliver the PDF (and the .pptx, and the .html) with the
|
|
68
|
+
review note.
|
|
69
|
+
|
|
70
|
+
### Author from a brief
|
|
71
|
+
|
|
72
|
+
Skip `content.txt` (delete the `content:` line in the job). Write the page list
|
|
73
|
+
with its claims first, then the pages. Coverage is skipped and says so; the
|
|
74
|
+
review reads the argument instead. Three sections a page, not four.
|
|
75
|
+
|
|
76
|
+
### Make it generic (an industry version of a client piece)
|
|
77
|
+
|
|
78
|
+
Author from the client piece: remove the client's figures, names, quotes and
|
|
79
|
+
vendors; put the client's name and its people in `denylist` so the gate proves
|
|
80
|
+
they are gone. Say in the note what was cut and what was generalised.
|
|
81
|
+
|
|
82
|
+
### Social cards
|
|
83
|
+
|
|
84
|
+
`--surface square` or `og`; one `c.page()` per card; `out/pages/pNN.png` are
|
|
85
|
+
the deliverables.
|
|
86
|
+
|
|
87
|
+
## The review note, always
|
|
88
|
+
|
|
89
|
+
What was changed from the source and why (every edit, every cut); the gate
|
|
90
|
+
table as printed; what a human still has to decide (a figure to confirm, a
|
|
91
|
+
quote to clear, a claim legal should see). A file delivered without the gate
|
|
92
|
+
table has been checked by nobody.
|
|
93
|
+
|
|
94
|
+
## Available scripts
|
|
95
|
+
|
|
96
|
+
- **`wand.js`** — doctor, new, build, check, ship, watch, gallery, components, brands
|
|
97
|
+
- **`lib/engine.js`** — the render and the gates
|
|
98
|
+
- **`lib/components.js`** — the vocabulary and its CSS
|
|
99
|
+
- **`lib/pptx.js`**, **`tools/embed_fonts.py`** — the PowerPoint export
|
|
100
|
+
- **`lib/html_export.js`** — the one-file HTML with its runtime
|
package/START-HERE.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Wand studio — start here
|
|
2
|
+
|
|
3
|
+
```bash
|
|
4
|
+
node wand.js doctor # what works here; chromium must name a binary
|
|
5
|
+
node wand.js new work/acme --surface letter --brand current
|
|
6
|
+
# write work/acme/job.mjs (pages(c)) and, for a rebuild, work/acme/content.txt
|
|
7
|
+
node wand.js build work/acme/job.mjs # gates, PDF, a PNG per page, out/sheet.png
|
|
8
|
+
node wand.js ship work/acme/job.mjs --pptx # + one-file HTML, PowerPoint
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
`node wand.js components` lists the vocabulary; `examples/overview/job.mjs` is
|
|
12
|
+
a finished document and `examples/gallery/job.mjs` every component on one
|
|
13
|
+
sheet (`node wand.js gallery --brand next` draws it on the website's brand).
|
|
14
|
+
|
|
15
|
+
`PROMPT.md` is the design system. `SKILL.md` is the procedure. Read §5 of the
|
|
16
|
+
prompt before composing; everything else when a gate names it.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Glyphs — Lucide
|
|
2
|
+
|
|
3
|
+
76 icons from [Lucide](https://lucide.dev) v0.469.0, **ISC licensed** (permissive:
|
|
4
|
+
use, modify and redistribute, keep the notice). They replace the numbered PNGs
|
|
5
|
+
that were reverse-extracted from a reference deck.
|
|
6
|
+
|
|
7
|
+
Two problems they fix, both of which were standing known gaps:
|
|
8
|
+
|
|
9
|
+
**Polarity.** The old glyphs were baked white or baked accent, so a white one on
|
|
10
|
+
a light-theme `surface` tile was invisible. These are single-colour stroke SVGs
|
|
11
|
+
with `stroke="currentColor"`, and the kit substitutes the theme's ink colour at
|
|
12
|
+
build time. There is no variant to pick and nothing to get wrong.
|
|
13
|
+
|
|
14
|
+
**Meaning.** They have names. A spec says `icon: "shield-check"`, not
|
|
15
|
+
`icon: "icon-17.png"`. `index.json` groups them by what a deck actually needs —
|
|
16
|
+
governance, workforce, platform, process, outcome, signal.
|
|
17
|
+
|
|
18
|
+
## How they reach the deck
|
|
19
|
+
|
|
20
|
+
As vector. pptxgenjs writes the OOXML `asvg:svgBlip` extension with a raster
|
|
21
|
+
fallback, so PowerPoint 2016+ renders the SVG and anything older gets the PNG.
|
|
22
|
+
Nothing is rasterised at build time, so the kit still needs no native
|
|
23
|
+
dependency.
|
|
24
|
+
|
|
25
|
+
## The old set
|
|
26
|
+
|
|
27
|
+
`../icons/*.png` is still there and still works — every existing spec references
|
|
28
|
+
those filenames. New specs should use glyph names. The two sets can coexist
|
|
29
|
+
indefinitely; `iconTile` resolves a name first and falls back to a filename.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-activity"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" />
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-atom"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<circle cx="12" cy="12" r="1" />
|
|
15
|
+
<path d="M20.2 20.2c2.04-2.03.02-7.36-4.5-11.9-4.54-4.52-9.87-6.54-11.9-4.5-2.04 2.03-.02 7.36 4.5 11.9 4.54 4.52 9.87 6.54 11.9 4.5Z" />
|
|
16
|
+
<path d="M15.7 15.7c4.52-4.54 6.54-9.87 4.5-11.9-2.03-2.04-7.36-.02-11.9 4.5-4.52 4.54-6.54 9.87-4.5 11.9 2.03 2.04 7.36.02 11.9-4.5Z" />
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-badge-check"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z" />
|
|
15
|
+
<path d="m9 12 2 2 4-4" />
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-bell"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M10.268 21a2 2 0 0 0 3.464 0" />
|
|
15
|
+
<path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" />
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-blocks"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<rect width="7" height="7" x="14" y="3" rx="1" />
|
|
15
|
+
<path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3" />
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-book-open"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M12 7v14" />
|
|
15
|
+
<path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z" />
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-bot"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M12 8V4H8" />
|
|
15
|
+
<rect width="16" height="12" x="4" y="8" rx="2" />
|
|
16
|
+
<path d="M2 14h2" />
|
|
17
|
+
<path d="M20 14h2" />
|
|
18
|
+
<path d="M15 13v2" />
|
|
19
|
+
<path d="M9 13v2" />
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-boxes"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z" />
|
|
15
|
+
<path d="m7 16.5-4.74-2.85" />
|
|
16
|
+
<path d="m7 16.5 5-3" />
|
|
17
|
+
<path d="M7 16.5v5.17" />
|
|
18
|
+
<path d="M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z" />
|
|
19
|
+
<path d="m17 16.5-5-3" />
|
|
20
|
+
<path d="m17 16.5 4.74-2.85" />
|
|
21
|
+
<path d="M17 16.5v5.17" />
|
|
22
|
+
<path d="M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z" />
|
|
23
|
+
<path d="M12 8 7.26 5.15" />
|
|
24
|
+
<path d="m12 8 4.74-2.85" />
|
|
25
|
+
<path d="M12 13.5V8" />
|
|
26
|
+
</svg>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-brain"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z" />
|
|
15
|
+
<path d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z" />
|
|
16
|
+
<path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4" />
|
|
17
|
+
<path d="M17.599 6.5a3 3 0 0 0 .399-1.375" />
|
|
18
|
+
<path d="M6.003 5.125A3 3 0 0 0 6.401 6.5" />
|
|
19
|
+
<path d="M3.477 10.896a4 4 0 0 1 .585-.396" />
|
|
20
|
+
<path d="M19.938 10.5a4 4 0 0 1 .585.396" />
|
|
21
|
+
<path d="M6 18a4 4 0 0 1-1.967-.516" />
|
|
22
|
+
<path d="M19.967 17.484A4 4 0 0 1 18 18" />
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-briefcase"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16" />
|
|
15
|
+
<rect width="20" height="14" x="2" y="6" rx="2" />
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-building-2"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" />
|
|
15
|
+
<path d="M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2" />
|
|
16
|
+
<path d="M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2" />
|
|
17
|
+
<path d="M10 6h4" />
|
|
18
|
+
<path d="M10 10h4" />
|
|
19
|
+
<path d="M10 14h4" />
|
|
20
|
+
<path d="M10 18h4" />
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- @license lucide-static v0.469.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-calendar"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M8 2v4" />
|
|
15
|
+
<path d="M16 2v4" />
|
|
16
|
+
<rect width="18" height="18" x="3" y="4" rx="2" />
|
|
17
|
+
<path d="M3 10h18" />
|
|
18
|
+
</svg>
|