@vibes.diy/prompts 2.2.10 → 2.2.11
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/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/json-docs.d.ts +1 -1
- package/llms/image-gen.d.ts +2 -0
- package/llms/image-gen.js +9 -0
- package/llms/image-gen.js.map +1 -0
- package/llms/image-gen.md +102 -0
- package/llms/index.d.ts +1 -1
- package/llms/index.js +3 -3
- package/package.json +3 -3
- package/prompts.d.ts +6 -0
- package/prompts.js +36 -3
- package/prompts.js.map +1 -1
- package/settings.d.ts +1 -0
- package/system-prompt-initial.md +2 -2
- package/system-prompt.md +2 -2
- package/themes/aether.md +41 -0
- package/themes/archive.md +43 -0
- package/themes/atelier.md +42 -0
- package/themes/atlas.md +42 -0
- package/themes/broadsheet.md +20 -0
- package/themes/brutalist.md +208 -0
- package/themes/capsule.md +47 -0
- package/themes/carbon.md +42 -0
- package/themes/chrome.md +132 -0
- package/themes/chrono.md +33 -0
- package/themes/codex.md +45 -0
- package/themes/computer-angel-heaven.md +57 -0
- package/themes/console.md +46 -0
- package/themes/default.md +96 -0
- package/themes/desktop.md +49 -0
- package/themes/dial.md +46 -0
- package/themes/dossier.md +35 -0
- package/themes/edge.md +39 -0
- package/themes/exemplars/aether/App.jsx +224 -0
- package/themes/exemplars/archive/App.jsx +222 -0
- package/themes/exemplars/atelier/App.jsx +224 -0
- package/themes/exemplars/atlas/App.jsx +216 -0
- package/themes/exemplars/broadsheet/App.jsx +216 -0
- package/themes/exemplars/brutalist/App.jsx +290 -0
- package/themes/exemplars/capsule/App.jsx +216 -0
- package/themes/exemplars/carbon/App.jsx +216 -0
- package/themes/exemplars/chrome/App.jsx +253 -0
- package/themes/exemplars/chrono/App.jsx +222 -0
- package/themes/exemplars/codex/App.jsx +224 -0
- package/themes/exemplars/computer-angel-heaven/App.jsx +224 -0
- package/themes/exemplars/console/App.jsx +216 -0
- package/themes/exemplars/default/App.jsx +219 -0
- package/themes/exemplars/desktop/App.jsx +224 -0
- package/themes/exemplars/dial/App.jsx +216 -0
- package/themes/exemplars/dossier/App.jsx +224 -0
- package/themes/exemplars/edge/App.jsx +216 -0
- package/themes/exemplars/guild/App.jsx +224 -0
- package/themes/exemplars/hearth/App.jsx +224 -0
- package/themes/exemplars/industrial/App.jsx +224 -0
- package/themes/exemplars/matrix/App.jsx +224 -0
- package/themes/exemplars/mesh/App.jsx +222 -0
- package/themes/exemplars/neomario/App.jsx +222 -0
- package/themes/exemplars/neon/App.jsx +224 -0
- package/themes/exemplars/nexus/App.jsx +216 -0
- package/themes/exemplars/opus/App.jsx +224 -0
- package/themes/exemplars/orbit/App.jsx +224 -0
- package/themes/exemplars/palate/App.jsx +224 -0
- package/themes/exemplars/pitch/App.jsx +222 -0
- package/themes/exemplars/poster/App.jsx +222 -0
- package/themes/exemplars/proof/App.jsx +224 -0
- package/themes/exemplars/recon/App.jsx +216 -0
- package/themes/exemplars/rift/App.jsx +224 -0
- package/themes/exemplars/rune/App.jsx +224 -0
- package/themes/exemplars/scrapbook/App.jsx +222 -0
- package/themes/exemplars/sensor/App.jsx +224 -0
- package/themes/exemplars/signal/App.jsx +222 -0
- package/themes/exemplars/slab/App.jsx +224 -0
- package/themes/exemplars/specimen/App.jsx +222 -0
- package/themes/exemplars/terminal/App.jsx +224 -0
- package/themes/exemplars/vault/App.jsx +222 -0
- package/themes/exemplars/winter-sports/App.jsx +224 -0
- package/themes/exemplars/zine/App.jsx +214 -0
- package/themes/guild.md +44 -0
- package/themes/hearth.md +45 -0
- package/themes/index.d.ts +11 -0
- package/themes/index.js +272 -0
- package/themes/index.js.map +1 -0
- package/themes/industrial.md +37 -0
- package/themes/matrix.md +41 -0
- package/themes/mesh.md +42 -0
- package/themes/neomario.md +47 -0
- package/themes/neon.md +48 -0
- package/themes/nexus.md +40 -0
- package/themes/opus.md +61 -0
- package/themes/orbit.md +46 -0
- package/themes/palate.md +35 -0
- package/themes/pitch.md +39 -0
- package/themes/poster.md +39 -0
- package/themes/proof.md +41 -0
- package/themes/recon.md +39 -0
- package/themes/rift.md +45 -0
- package/themes/rune.md +44 -0
- package/themes/scrapbook.md +43 -0
- package/themes/sensor.md +42 -0
- package/themes/signal.md +37 -0
- package/themes/slab.md +35 -0
- package/themes/specimen.md +21 -0
- package/themes/terminal.md +39 -0
- package/themes/vault.md +41 -0
- package/themes/winter-sports.md +39 -0
- package/themes/zine.md +40 -0
- package/llms/img-vibes.d.ts +0 -2
- package/llms/img-vibes.js +0 -9
- package/llms/img-vibes.js.map +0 -1
- package/llms/img-vibes.md +0 -167
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
|
+
|
|
3
|
+
// Theme: Winter Sports — auto-generated exemplar with prefers-color-scheme.
|
|
4
|
+
// Canonical palette: bg oklch(0.99 0.003 240), accent oklch(0.55 0.19 250).
|
|
5
|
+
// Inverse computed by flipping oklch/hex lightness; tune by hand if needed.
|
|
6
|
+
|
|
7
|
+
const THEME_CSS = `
|
|
8
|
+
:root {
|
|
9
|
+
--bg: oklch(0.99 0.003 240);
|
|
10
|
+
--accent: oklch(0.55 0.19 250);
|
|
11
|
+
--text: rgba(20, 20, 20, 0.92);
|
|
12
|
+
--muted: rgba(20, 20, 20, 0.5);
|
|
13
|
+
--border: rgba(20, 20, 20, 0.14);
|
|
14
|
+
--raised: rgba(255, 255, 255, 0.55);
|
|
15
|
+
--card-bg: rgba(255, 255, 255, 0.85);
|
|
16
|
+
--accent-text: #fafafa;
|
|
17
|
+
}
|
|
18
|
+
@media (prefers-color-scheme: dark) {
|
|
19
|
+
:root {
|
|
20
|
+
--bg: oklch(0.06 0.003 240);
|
|
21
|
+
--accent: oklch(0.45 0.19 250);
|
|
22
|
+
--text: rgba(255, 255, 255, 0.92);
|
|
23
|
+
--muted: rgba(255, 255, 255, 0.55);
|
|
24
|
+
--border: rgba(255, 255, 255, 0.18);
|
|
25
|
+
--raised: rgba(255, 255, 255, 0.06);
|
|
26
|
+
--card-bg: rgba(255, 255, 255, 0.04);
|
|
27
|
+
--accent-text: #0a0a0a;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
body { margin: 0; }
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
export default function App() {
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const link = document.createElement("link");
|
|
36
|
+
link.rel = "stylesheet";
|
|
37
|
+
link.href = "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=optional";
|
|
38
|
+
document.head.appendChild(link);
|
|
39
|
+
return () => link.remove();
|
|
40
|
+
}, []);
|
|
41
|
+
|
|
42
|
+
const [draft, setDraft] = useState("");
|
|
43
|
+
|
|
44
|
+
const c = {
|
|
45
|
+
page: {
|
|
46
|
+
minHeight: "100vh",
|
|
47
|
+
background: "var(--bg)",
|
|
48
|
+
color: "var(--text)",
|
|
49
|
+
fontFamily: "'Inter', sans-serif",
|
|
50
|
+
padding: "3rem 2rem 4rem",
|
|
51
|
+
},
|
|
52
|
+
container: { maxWidth: "56rem", margin: "0 auto" },
|
|
53
|
+
header: { display: "flex", flexDirection: "column", gap: "0.85rem", marginBottom: "2rem" },
|
|
54
|
+
eyebrow: {
|
|
55
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
56
|
+
fontSize: "0.72rem",
|
|
57
|
+
letterSpacing: "0.25em",
|
|
58
|
+
textTransform: "uppercase",
|
|
59
|
+
color: "var(--muted)",
|
|
60
|
+
},
|
|
61
|
+
title: {
|
|
62
|
+
fontSize: "clamp(3rem, 13vw, 10rem)",
|
|
63
|
+
fontWeight: 800,
|
|
64
|
+
letterSpacing: "-0.04em",
|
|
65
|
+
lineHeight: 0.9,
|
|
66
|
+
color: "var(--accent)",
|
|
67
|
+
margin: 0,
|
|
68
|
+
},
|
|
69
|
+
subtitle: {
|
|
70
|
+
fontSize: "1.05rem",
|
|
71
|
+
color: "var(--muted)",
|
|
72
|
+
maxWidth: "32rem",
|
|
73
|
+
lineHeight: 1.5,
|
|
74
|
+
margin: 0,
|
|
75
|
+
},
|
|
76
|
+
modeNote: {
|
|
77
|
+
marginTop: "0.5rem",
|
|
78
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
79
|
+
fontSize: "0.7rem",
|
|
80
|
+
letterSpacing: "0.2em",
|
|
81
|
+
textTransform: "uppercase",
|
|
82
|
+
color: "var(--muted)",
|
|
83
|
+
},
|
|
84
|
+
grid: {
|
|
85
|
+
display: "grid",
|
|
86
|
+
gridTemplateColumns: "repeat(auto-fit, minmax(18rem, 1fr))",
|
|
87
|
+
gap: "1.25rem",
|
|
88
|
+
marginTop: "2.5rem",
|
|
89
|
+
},
|
|
90
|
+
card: {
|
|
91
|
+
background: "var(--card-bg)",
|
|
92
|
+
border: "1px solid var(--border)",
|
|
93
|
+
borderRadius: 14,
|
|
94
|
+
padding: "1.5rem",
|
|
95
|
+
},
|
|
96
|
+
cardTitle: {
|
|
97
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
98
|
+
fontSize: "0.7rem",
|
|
99
|
+
letterSpacing: "0.18em",
|
|
100
|
+
textTransform: "uppercase",
|
|
101
|
+
color: "var(--muted)",
|
|
102
|
+
margin: "0 0 1rem",
|
|
103
|
+
},
|
|
104
|
+
list: { listStyle: "none", margin: 0, padding: 0, display: "flex", flexDirection: "column", gap: "0.55rem" },
|
|
105
|
+
listItem: {
|
|
106
|
+
display: "flex",
|
|
107
|
+
alignItems: "center",
|
|
108
|
+
justifyContent: "space-between",
|
|
109
|
+
gap: "0.75rem",
|
|
110
|
+
padding: "0.7rem 0.85rem",
|
|
111
|
+
borderRadius: 10,
|
|
112
|
+
background: "var(--raised)",
|
|
113
|
+
border: "1px solid var(--border)",
|
|
114
|
+
fontSize: "0.95rem",
|
|
115
|
+
},
|
|
116
|
+
badge: {
|
|
117
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
118
|
+
fontSize: "0.7rem",
|
|
119
|
+
padding: "0.18rem 0.6rem",
|
|
120
|
+
borderRadius: 999,
|
|
121
|
+
background: "var(--accent)",
|
|
122
|
+
color: "var(--accent-text)",
|
|
123
|
+
fontWeight: 600,
|
|
124
|
+
letterSpacing: "0.08em",
|
|
125
|
+
textTransform: "uppercase",
|
|
126
|
+
},
|
|
127
|
+
formRow: { display: "flex", gap: "0.5rem", marginTop: "0.5rem" },
|
|
128
|
+
input: {
|
|
129
|
+
flex: 1,
|
|
130
|
+
background: "var(--raised)",
|
|
131
|
+
color: "var(--text)",
|
|
132
|
+
border: "1px solid var(--border)",
|
|
133
|
+
borderRadius: 10,
|
|
134
|
+
padding: "0.7rem 0.9rem",
|
|
135
|
+
fontFamily: "inherit",
|
|
136
|
+
fontSize: "0.95rem",
|
|
137
|
+
outline: "none",
|
|
138
|
+
},
|
|
139
|
+
button: {
|
|
140
|
+
background: "var(--accent)",
|
|
141
|
+
color: "var(--accent-text)",
|
|
142
|
+
border: "none",
|
|
143
|
+
borderRadius: 10,
|
|
144
|
+
padding: "0.7rem 1.1rem",
|
|
145
|
+
fontFamily: "inherit",
|
|
146
|
+
fontSize: "0.95rem",
|
|
147
|
+
fontWeight: 600,
|
|
148
|
+
cursor: "pointer",
|
|
149
|
+
},
|
|
150
|
+
ghost: {
|
|
151
|
+
background: "transparent",
|
|
152
|
+
color: "var(--text)",
|
|
153
|
+
border: "1px solid var(--border)",
|
|
154
|
+
borderRadius: 10,
|
|
155
|
+
padding: "0.7rem 1.1rem",
|
|
156
|
+
fontFamily: "inherit",
|
|
157
|
+
fontSize: "0.95rem",
|
|
158
|
+
cursor: "pointer",
|
|
159
|
+
},
|
|
160
|
+
buttonRow: { display: "flex", gap: "0.6rem", marginTop: "1.25rem", flexWrap: "wrap" },
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const items = [
|
|
164
|
+
{ id: 1, title: "Daily standup notes", tag: "active" },
|
|
165
|
+
{ id: 2, title: "Q3 launch checklist", tag: "draft" },
|
|
166
|
+
{ id: 3, title: "Reading list", tag: "synced" },
|
|
167
|
+
];
|
|
168
|
+
|
|
169
|
+
return (
|
|
170
|
+
<>
|
|
171
|
+
<style>{THEME_CSS}</style>
|
|
172
|
+
<main id="app" style={c.page}>
|
|
173
|
+
<div style={c.container}>
|
|
174
|
+
<header style={c.header}>
|
|
175
|
+
<span style={c.eyebrow}>vibes.diy theme</span>
|
|
176
|
+
<h1 style={c.title}>Winter Sports</h1>
|
|
177
|
+
<p style={c.subtitle}>
|
|
178
|
+
An exemplar app on the Winter Sports theme — list, form, buttons rendered with the catalog tokens.
|
|
179
|
+
</p>
|
|
180
|
+
<div style={c.modeNote}>auto · light + dark via prefers-color-scheme</div>
|
|
181
|
+
</header>
|
|
182
|
+
|
|
183
|
+
<div style={c.grid}>
|
|
184
|
+
<section style={c.card}>
|
|
185
|
+
<h2 style={c.cardTitle}>Recent</h2>
|
|
186
|
+
<ul style={c.list}>
|
|
187
|
+
{items.map((it) => (
|
|
188
|
+
<li key={it.id} style={c.listItem}>
|
|
189
|
+
<span>{it.title}</span>
|
|
190
|
+
<span style={c.badge}>{it.tag}</span>
|
|
191
|
+
</li>
|
|
192
|
+
))}
|
|
193
|
+
</ul>
|
|
194
|
+
</section>
|
|
195
|
+
|
|
196
|
+
<section style={c.card}>
|
|
197
|
+
<h2 style={c.cardTitle}>New entry</h2>
|
|
198
|
+
<p style={{ ...c.subtitle, fontSize: "0.9rem", marginTop: "0.25rem" }}>Capture a quick thought.</p>
|
|
199
|
+
<div style={c.formRow}>
|
|
200
|
+
<input
|
|
201
|
+
style={c.input}
|
|
202
|
+
placeholder="What's on your mind?"
|
|
203
|
+
value={draft}
|
|
204
|
+
onChange={(e) => setDraft(e.target.value)}
|
|
205
|
+
/>
|
|
206
|
+
<button style={c.button} type="button">
|
|
207
|
+
Save
|
|
208
|
+
</button>
|
|
209
|
+
</div>
|
|
210
|
+
<div style={c.buttonRow}>
|
|
211
|
+
<button style={c.button} type="button">
|
|
212
|
+
Primary
|
|
213
|
+
</button>
|
|
214
|
+
<button style={c.ghost} type="button">
|
|
215
|
+
Secondary
|
|
216
|
+
</button>
|
|
217
|
+
</div>
|
|
218
|
+
</section>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
</main>
|
|
222
|
+
</>
|
|
223
|
+
);
|
|
224
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
|
+
|
|
3
|
+
// Theme: Zine Cut — auto-generated exemplar with prefers-color-scheme.
|
|
4
|
+
// Canonical palette: bg oklch(0.96 0.005 100), accent oklch(0.05 0 0).
|
|
5
|
+
// Inverse computed by flipping oklch/hex lightness; tune by hand if needed.
|
|
6
|
+
|
|
7
|
+
const THEME_CSS = `
|
|
8
|
+
:root {
|
|
9
|
+
--bg: oklch(0.96 0.005 100);
|
|
10
|
+
--accent: oklch(0.05 0 0);
|
|
11
|
+
--text: rgba(20, 20, 20, 0.92);
|
|
12
|
+
--muted: rgba(20, 20, 20, 0.5);
|
|
13
|
+
--border: rgba(20, 20, 20, 0.14);
|
|
14
|
+
--raised: rgba(255, 255, 255, 0.55);
|
|
15
|
+
--card-bg: rgba(255, 255, 255, 0.85);
|
|
16
|
+
--accent-text: #fafafa;
|
|
17
|
+
}
|
|
18
|
+
@media (prefers-color-scheme: dark) {
|
|
19
|
+
:root {
|
|
20
|
+
--bg: oklch(0.06 0.005 100);
|
|
21
|
+
--accent: oklch(0.95 0 0);
|
|
22
|
+
--text: rgba(255, 255, 255, 0.92);
|
|
23
|
+
--muted: rgba(255, 255, 255, 0.55);
|
|
24
|
+
--border: rgba(255, 255, 255, 0.18);
|
|
25
|
+
--raised: rgba(255, 255, 255, 0.06);
|
|
26
|
+
--card-bg: rgba(255, 255, 255, 0.04);
|
|
27
|
+
--accent-text: #0a0a0a;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
body { margin: 0; }
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
export default function App() {
|
|
34
|
+
const [draft, setDraft] = useState("");
|
|
35
|
+
|
|
36
|
+
const c = {
|
|
37
|
+
page: {
|
|
38
|
+
minHeight: "100vh",
|
|
39
|
+
background: "var(--bg)",
|
|
40
|
+
color: "var(--text)",
|
|
41
|
+
fontFamily: "var(--f-type)",
|
|
42
|
+
padding: "3rem 2rem 4rem",
|
|
43
|
+
},
|
|
44
|
+
container: { maxWidth: "56rem", margin: "0 auto" },
|
|
45
|
+
header: { display: "flex", flexDirection: "column", gap: "0.85rem", marginBottom: "2rem" },
|
|
46
|
+
eyebrow: {
|
|
47
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
48
|
+
fontSize: "0.72rem",
|
|
49
|
+
letterSpacing: "0.25em",
|
|
50
|
+
textTransform: "uppercase",
|
|
51
|
+
color: "var(--muted)",
|
|
52
|
+
},
|
|
53
|
+
title: {
|
|
54
|
+
fontSize: "clamp(3rem, 13vw, 10rem)",
|
|
55
|
+
fontWeight: 800,
|
|
56
|
+
letterSpacing: "-0.04em",
|
|
57
|
+
lineHeight: 0.9,
|
|
58
|
+
color: "var(--accent)",
|
|
59
|
+
margin: 0,
|
|
60
|
+
},
|
|
61
|
+
subtitle: {
|
|
62
|
+
fontSize: "1.05rem",
|
|
63
|
+
color: "var(--muted)",
|
|
64
|
+
maxWidth: "32rem",
|
|
65
|
+
lineHeight: 1.5,
|
|
66
|
+
margin: 0,
|
|
67
|
+
},
|
|
68
|
+
modeNote: {
|
|
69
|
+
marginTop: "0.5rem",
|
|
70
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
71
|
+
fontSize: "0.7rem",
|
|
72
|
+
letterSpacing: "0.2em",
|
|
73
|
+
textTransform: "uppercase",
|
|
74
|
+
color: "var(--muted)",
|
|
75
|
+
},
|
|
76
|
+
grid: {
|
|
77
|
+
display: "grid",
|
|
78
|
+
gridTemplateColumns: "repeat(auto-fit, minmax(18rem, 1fr))",
|
|
79
|
+
gap: "1.25rem",
|
|
80
|
+
marginTop: "2.5rem",
|
|
81
|
+
},
|
|
82
|
+
card: {
|
|
83
|
+
background: "var(--card-bg)",
|
|
84
|
+
border: "1px solid var(--border)",
|
|
85
|
+
borderRadius: 14,
|
|
86
|
+
padding: "1.5rem",
|
|
87
|
+
},
|
|
88
|
+
cardTitle: {
|
|
89
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
90
|
+
fontSize: "0.7rem",
|
|
91
|
+
letterSpacing: "0.18em",
|
|
92
|
+
textTransform: "uppercase",
|
|
93
|
+
color: "var(--muted)",
|
|
94
|
+
margin: "0 0 1rem",
|
|
95
|
+
},
|
|
96
|
+
list: { listStyle: "none", margin: 0, padding: 0, display: "flex", flexDirection: "column", gap: "0.55rem" },
|
|
97
|
+
listItem: {
|
|
98
|
+
display: "flex",
|
|
99
|
+
alignItems: "center",
|
|
100
|
+
justifyContent: "space-between",
|
|
101
|
+
gap: "0.75rem",
|
|
102
|
+
padding: "0.7rem 0.85rem",
|
|
103
|
+
borderRadius: 10,
|
|
104
|
+
background: "var(--raised)",
|
|
105
|
+
border: "1px solid var(--border)",
|
|
106
|
+
fontSize: "0.95rem",
|
|
107
|
+
},
|
|
108
|
+
badge: {
|
|
109
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
110
|
+
fontSize: "0.7rem",
|
|
111
|
+
padding: "0.18rem 0.6rem",
|
|
112
|
+
borderRadius: 999,
|
|
113
|
+
background: "var(--accent)",
|
|
114
|
+
color: "var(--accent-text)",
|
|
115
|
+
fontWeight: 600,
|
|
116
|
+
letterSpacing: "0.08em",
|
|
117
|
+
textTransform: "uppercase",
|
|
118
|
+
},
|
|
119
|
+
formRow: { display: "flex", gap: "0.5rem", marginTop: "0.5rem" },
|
|
120
|
+
input: {
|
|
121
|
+
flex: 1,
|
|
122
|
+
background: "var(--raised)",
|
|
123
|
+
color: "var(--text)",
|
|
124
|
+
border: "1px solid var(--border)",
|
|
125
|
+
borderRadius: 10,
|
|
126
|
+
padding: "0.7rem 0.9rem",
|
|
127
|
+
fontFamily: "inherit",
|
|
128
|
+
fontSize: "0.95rem",
|
|
129
|
+
outline: "none",
|
|
130
|
+
},
|
|
131
|
+
button: {
|
|
132
|
+
background: "var(--accent)",
|
|
133
|
+
color: "var(--accent-text)",
|
|
134
|
+
border: "none",
|
|
135
|
+
borderRadius: 10,
|
|
136
|
+
padding: "0.7rem 1.1rem",
|
|
137
|
+
fontFamily: "inherit",
|
|
138
|
+
fontSize: "0.95rem",
|
|
139
|
+
fontWeight: 600,
|
|
140
|
+
cursor: "pointer",
|
|
141
|
+
},
|
|
142
|
+
ghost: {
|
|
143
|
+
background: "transparent",
|
|
144
|
+
color: "var(--text)",
|
|
145
|
+
border: "1px solid var(--border)",
|
|
146
|
+
borderRadius: 10,
|
|
147
|
+
padding: "0.7rem 1.1rem",
|
|
148
|
+
fontFamily: "inherit",
|
|
149
|
+
fontSize: "0.95rem",
|
|
150
|
+
cursor: "pointer",
|
|
151
|
+
},
|
|
152
|
+
buttonRow: { display: "flex", gap: "0.6rem", marginTop: "1.25rem", flexWrap: "wrap" },
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const items = [
|
|
156
|
+
{ id: 1, title: "Daily standup notes", tag: "active" },
|
|
157
|
+
{ id: 2, title: "Q3 launch checklist", tag: "draft" },
|
|
158
|
+
{ id: 3, title: "Reading list", tag: "synced" },
|
|
159
|
+
];
|
|
160
|
+
|
|
161
|
+
return (
|
|
162
|
+
<>
|
|
163
|
+
<style>{THEME_CSS}</style>
|
|
164
|
+
<main id="app" style={c.page}>
|
|
165
|
+
<div style={c.container}>
|
|
166
|
+
<header style={c.header}>
|
|
167
|
+
<span style={c.eyebrow}>vibes.diy theme</span>
|
|
168
|
+
<h1 style={c.title}>Zine Cut</h1>
|
|
169
|
+
<p style={c.subtitle}>An exemplar app on the Zine Cut theme — list, form, buttons rendered with the catalog tokens.</p>
|
|
170
|
+
<div style={c.modeNote}>auto · light + dark via prefers-color-scheme</div>
|
|
171
|
+
</header>
|
|
172
|
+
|
|
173
|
+
<div style={c.grid}>
|
|
174
|
+
<section style={c.card}>
|
|
175
|
+
<h2 style={c.cardTitle}>Recent</h2>
|
|
176
|
+
<ul style={c.list}>
|
|
177
|
+
{items.map((it) => (
|
|
178
|
+
<li key={it.id} style={c.listItem}>
|
|
179
|
+
<span>{it.title}</span>
|
|
180
|
+
<span style={c.badge}>{it.tag}</span>
|
|
181
|
+
</li>
|
|
182
|
+
))}
|
|
183
|
+
</ul>
|
|
184
|
+
</section>
|
|
185
|
+
|
|
186
|
+
<section style={c.card}>
|
|
187
|
+
<h2 style={c.cardTitle}>New entry</h2>
|
|
188
|
+
<p style={{ ...c.subtitle, fontSize: "0.9rem", marginTop: "0.25rem" }}>Capture a quick thought.</p>
|
|
189
|
+
<div style={c.formRow}>
|
|
190
|
+
<input
|
|
191
|
+
style={c.input}
|
|
192
|
+
placeholder="What's on your mind?"
|
|
193
|
+
value={draft}
|
|
194
|
+
onChange={(e) => setDraft(e.target.value)}
|
|
195
|
+
/>
|
|
196
|
+
<button style={c.button} type="button">
|
|
197
|
+
Save
|
|
198
|
+
</button>
|
|
199
|
+
</div>
|
|
200
|
+
<div style={c.buttonRow}>
|
|
201
|
+
<button style={c.button} type="button">
|
|
202
|
+
Primary
|
|
203
|
+
</button>
|
|
204
|
+
<button style={c.ghost} type="button">
|
|
205
|
+
Secondary
|
|
206
|
+
</button>
|
|
207
|
+
</div>
|
|
208
|
+
</section>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
</main>
|
|
212
|
+
</>
|
|
213
|
+
);
|
|
214
|
+
}
|
package/themes/guild.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Guild Ledger
|
|
3
|
+
colors:
|
|
4
|
+
bg: "oklch(0.10 0.03 260)"
|
|
5
|
+
bg-highlight: "oklch(0.18 0.04 255)"
|
|
6
|
+
fg: "oklch(0.90 0.000 0)"
|
|
7
|
+
fg-muted: "oklch(0.67 0.04 240)"
|
|
8
|
+
gold-base: "oklch(0.60 0.13 80)"
|
|
9
|
+
gold-mid: "oklch(0.78 0.13 88)"
|
|
10
|
+
gold-light: "oklch(0.96 0.08 100)"
|
|
11
|
+
stone: "oklch(0.15 0.000 0)"
|
|
12
|
+
parchment: "oklch(0.84 0.03 75)"
|
|
13
|
+
wood: "oklch(0.27 0.04 30)"
|
|
14
|
+
iron: "oklch(0.27 0.02 220)"
|
|
15
|
+
typography:
|
|
16
|
+
body-md:
|
|
17
|
+
fontFamily: Cinzel
|
|
18
|
+
fontSize: 1rem
|
|
19
|
+
fontWeight: "400"
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Brand & Style
|
|
23
|
+
|
|
24
|
+
Guild Ledger design system. A dark, atmospheric theme with Cinzel typography. Use this design system\'s color tokens, spacing, and typographic choices consistently across all generated components. This theme **respects the visitor's system color scheme** — dark by default, with a light variant that auto-applies on `@media (prefers-color-scheme: light)`. Apply both color sets via CSS variables in a `<style>` block; never hard-code one mode only.
|
|
25
|
+
|
|
26
|
+
## Colors
|
|
27
|
+
|
|
28
|
+
- **bg** (oklch(0.10 0.03 260)): Use for backgrounds.
|
|
29
|
+
- **bg-highlight** (oklch(0.18 0.04 255)): Use for backgrounds.
|
|
30
|
+
- **fg** (oklch(0.90 0.000 0)): Use for text content.
|
|
31
|
+
- **fg-muted** (oklch(0.67 0.04 240)): Use for text content.
|
|
32
|
+
- **gold-base** (oklch(0.60 0.13 80)): Use for supporting UI elements.
|
|
33
|
+
- **gold-mid** (oklch(0.78 0.13 88)): Use for supporting UI elements.
|
|
34
|
+
- **gold-light** (oklch(0.96 0.08 100)): Use for supporting UI elements.
|
|
35
|
+
- **stone** (oklch(0.15 0.000 0)): Use for supporting UI elements.
|
|
36
|
+
|
|
37
|
+
## Typography
|
|
38
|
+
|
|
39
|
+
Load fonts from Google Fonts: Cinzel. Use display=optional.
|
|
40
|
+
Primary body font: 'Cinzel', serif.
|
|
41
|
+
|
|
42
|
+
## Components
|
|
43
|
+
|
|
44
|
+
Apply the color tokens and typography consistently to all interactive elements (buttons, inputs, cards, modals). Ensure sufficient contrast between text and background colors for accessibility.
|
package/themes/hearth.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Hearth Sim
|
|
3
|
+
colors:
|
|
4
|
+
bg-start: "oklch(0.18 0.10 300)"
|
|
5
|
+
bg-end: "oklch(0.12 0.09 300)"
|
|
6
|
+
primary: "oklch(0.38 0.17 295)"
|
|
7
|
+
primary-dark: "oklch(0.30 0.15 295)"
|
|
8
|
+
primary-light: "oklch(0.47 0.18 295)"
|
|
9
|
+
accent-green: "oklch(0.70 0.15 155)"
|
|
10
|
+
accent-gold: "oklch(0.88 0.18 95)"
|
|
11
|
+
danger: "oklch(0.55 0.20 25)"
|
|
12
|
+
text: "oklch(1.00 0.000 0)"
|
|
13
|
+
text-purple: "oklch(0.25 0.16 295)"
|
|
14
|
+
card-bg: "oklch(0.38 0.17 295 / 0.4)"
|
|
15
|
+
border: "oklch(1.00 0.000 0 / 0.1)"
|
|
16
|
+
typography:
|
|
17
|
+
body-md:
|
|
18
|
+
fontFamily: Nunito
|
|
19
|
+
fontSize: 1rem
|
|
20
|
+
fontWeight: "400"
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Brand & Style
|
|
24
|
+
|
|
25
|
+
Hearth Sim design system. A clean, structured theme with Fredoka and Nunito typography. Use this design system\'s color tokens, spacing, and typographic choices consistently across all generated components. This theme **respects the visitor's system color scheme** — light by default, with a dark variant that auto-applies on `@media (prefers-color-scheme: dark)`. Apply both color sets via CSS variables in a `<style>` block; never hard-code one mode only.
|
|
26
|
+
|
|
27
|
+
## Colors
|
|
28
|
+
|
|
29
|
+
- **bg-start** (oklch(0.18 0.10 300)): Use for backgrounds.
|
|
30
|
+
- **bg-end** (oklch(0.12 0.09 300)): Use for backgrounds.
|
|
31
|
+
- **primary** (oklch(0.38 0.17 295)): Use for primary actions and accents.
|
|
32
|
+
- **primary-dark** (oklch(0.30 0.15 295)): Use for primary actions and accents.
|
|
33
|
+
- **primary-light** (oklch(0.47 0.18 295)): Use for primary actions and accents.
|
|
34
|
+
- **accent-green** (oklch(0.70 0.15 155)): Use for primary actions and accents.
|
|
35
|
+
- **accent-gold** (oklch(0.88 0.18 95)): Use for primary actions and accents.
|
|
36
|
+
- **danger** (oklch(0.55 0.20 25)): Use for supporting UI elements.
|
|
37
|
+
|
|
38
|
+
## Typography
|
|
39
|
+
|
|
40
|
+
Load fonts from Google Fonts: Fredoka, Nunito. Use display=optional.
|
|
41
|
+
Primary body font: 'Nunito', sans-serif.
|
|
42
|
+
|
|
43
|
+
## Components
|
|
44
|
+
|
|
45
|
+
Apply the color tokens and typography consistently to all interactive elements (buttons, inputs, cards, modals). Ensure sufficient contrast between text and background colors for accessibility.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface VibesTheme {
|
|
2
|
+
slug: string;
|
|
3
|
+
name: string;
|
|
4
|
+
accentColor: string;
|
|
5
|
+
bgColor: string;
|
|
6
|
+
bodyFont?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const vibesThemes: VibesTheme[];
|
|
9
|
+
export declare function getThemeCatalogNames(): ReadonlySet<string>;
|
|
10
|
+
export declare function getThemeBySlug(slug: string): VibesTheme | undefined;
|
|
11
|
+
export declare function parseDesignMd(content: string, slug?: string): VibesTheme;
|