@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.
Files changed (112) hide show
  1. package/index.d.ts +1 -0
  2. package/index.js +1 -0
  3. package/index.js.map +1 -1
  4. package/json-docs.d.ts +1 -1
  5. package/llms/image-gen.d.ts +2 -0
  6. package/llms/image-gen.js +9 -0
  7. package/llms/image-gen.js.map +1 -0
  8. package/llms/image-gen.md +102 -0
  9. package/llms/index.d.ts +1 -1
  10. package/llms/index.js +3 -3
  11. package/package.json +3 -3
  12. package/prompts.d.ts +6 -0
  13. package/prompts.js +36 -3
  14. package/prompts.js.map +1 -1
  15. package/settings.d.ts +1 -0
  16. package/system-prompt-initial.md +2 -2
  17. package/system-prompt.md +2 -2
  18. package/themes/aether.md +41 -0
  19. package/themes/archive.md +43 -0
  20. package/themes/atelier.md +42 -0
  21. package/themes/atlas.md +42 -0
  22. package/themes/broadsheet.md +20 -0
  23. package/themes/brutalist.md +208 -0
  24. package/themes/capsule.md +47 -0
  25. package/themes/carbon.md +42 -0
  26. package/themes/chrome.md +132 -0
  27. package/themes/chrono.md +33 -0
  28. package/themes/codex.md +45 -0
  29. package/themes/computer-angel-heaven.md +57 -0
  30. package/themes/console.md +46 -0
  31. package/themes/default.md +96 -0
  32. package/themes/desktop.md +49 -0
  33. package/themes/dial.md +46 -0
  34. package/themes/dossier.md +35 -0
  35. package/themes/edge.md +39 -0
  36. package/themes/exemplars/aether/App.jsx +224 -0
  37. package/themes/exemplars/archive/App.jsx +222 -0
  38. package/themes/exemplars/atelier/App.jsx +224 -0
  39. package/themes/exemplars/atlas/App.jsx +216 -0
  40. package/themes/exemplars/broadsheet/App.jsx +216 -0
  41. package/themes/exemplars/brutalist/App.jsx +290 -0
  42. package/themes/exemplars/capsule/App.jsx +216 -0
  43. package/themes/exemplars/carbon/App.jsx +216 -0
  44. package/themes/exemplars/chrome/App.jsx +253 -0
  45. package/themes/exemplars/chrono/App.jsx +222 -0
  46. package/themes/exemplars/codex/App.jsx +224 -0
  47. package/themes/exemplars/computer-angel-heaven/App.jsx +224 -0
  48. package/themes/exemplars/console/App.jsx +216 -0
  49. package/themes/exemplars/default/App.jsx +219 -0
  50. package/themes/exemplars/desktop/App.jsx +224 -0
  51. package/themes/exemplars/dial/App.jsx +216 -0
  52. package/themes/exemplars/dossier/App.jsx +224 -0
  53. package/themes/exemplars/edge/App.jsx +216 -0
  54. package/themes/exemplars/guild/App.jsx +224 -0
  55. package/themes/exemplars/hearth/App.jsx +224 -0
  56. package/themes/exemplars/industrial/App.jsx +224 -0
  57. package/themes/exemplars/matrix/App.jsx +224 -0
  58. package/themes/exemplars/mesh/App.jsx +222 -0
  59. package/themes/exemplars/neomario/App.jsx +222 -0
  60. package/themes/exemplars/neon/App.jsx +224 -0
  61. package/themes/exemplars/nexus/App.jsx +216 -0
  62. package/themes/exemplars/opus/App.jsx +224 -0
  63. package/themes/exemplars/orbit/App.jsx +224 -0
  64. package/themes/exemplars/palate/App.jsx +224 -0
  65. package/themes/exemplars/pitch/App.jsx +222 -0
  66. package/themes/exemplars/poster/App.jsx +222 -0
  67. package/themes/exemplars/proof/App.jsx +224 -0
  68. package/themes/exemplars/recon/App.jsx +216 -0
  69. package/themes/exemplars/rift/App.jsx +224 -0
  70. package/themes/exemplars/rune/App.jsx +224 -0
  71. package/themes/exemplars/scrapbook/App.jsx +222 -0
  72. package/themes/exemplars/sensor/App.jsx +224 -0
  73. package/themes/exemplars/signal/App.jsx +222 -0
  74. package/themes/exemplars/slab/App.jsx +224 -0
  75. package/themes/exemplars/specimen/App.jsx +222 -0
  76. package/themes/exemplars/terminal/App.jsx +224 -0
  77. package/themes/exemplars/vault/App.jsx +222 -0
  78. package/themes/exemplars/winter-sports/App.jsx +224 -0
  79. package/themes/exemplars/zine/App.jsx +214 -0
  80. package/themes/guild.md +44 -0
  81. package/themes/hearth.md +45 -0
  82. package/themes/index.d.ts +11 -0
  83. package/themes/index.js +272 -0
  84. package/themes/index.js.map +1 -0
  85. package/themes/industrial.md +37 -0
  86. package/themes/matrix.md +41 -0
  87. package/themes/mesh.md +42 -0
  88. package/themes/neomario.md +47 -0
  89. package/themes/neon.md +48 -0
  90. package/themes/nexus.md +40 -0
  91. package/themes/opus.md +61 -0
  92. package/themes/orbit.md +46 -0
  93. package/themes/palate.md +35 -0
  94. package/themes/pitch.md +39 -0
  95. package/themes/poster.md +39 -0
  96. package/themes/proof.md +41 -0
  97. package/themes/recon.md +39 -0
  98. package/themes/rift.md +45 -0
  99. package/themes/rune.md +44 -0
  100. package/themes/scrapbook.md +43 -0
  101. package/themes/sensor.md +42 -0
  102. package/themes/signal.md +37 -0
  103. package/themes/slab.md +35 -0
  104. package/themes/specimen.md +21 -0
  105. package/themes/terminal.md +39 -0
  106. package/themes/vault.md +41 -0
  107. package/themes/winter-sports.md +39 -0
  108. package/themes/zine.md +40 -0
  109. package/llms/img-vibes.d.ts +0 -2
  110. package/llms/img-vibes.js +0 -9
  111. package/llms/img-vibes.js.map +0 -1
  112. package/llms/img-vibes.md +0 -167
@@ -0,0 +1,222 @@
1
+ import React, { useEffect, useState } from "react";
2
+
3
+ // Theme: Archive — auto-generated exemplar with prefers-color-scheme.
4
+ // Canonical palette: bg oklch(0.95 0.01 70), accent oklch(0.35 0.04 50).
5
+ // Inverse computed by flipping oklch/hex lightness; tune by hand if needed.
6
+
7
+ const THEME_CSS = `
8
+ :root {
9
+ --bg: oklch(0.95 0.01 70);
10
+ --accent: oklch(0.35 0.04 50);
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.01 70);
21
+ --accent: oklch(0.65 0.04 50);
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}>Archive</h1>
177
+ <p style={c.subtitle}>An exemplar app on the Archive theme — list, form, buttons rendered with the catalog tokens.</p>
178
+ <div style={c.modeNote}>auto · light + dark via prefers-color-scheme</div>
179
+ </header>
180
+
181
+ <div style={c.grid}>
182
+ <section style={c.card}>
183
+ <h2 style={c.cardTitle}>Recent</h2>
184
+ <ul style={c.list}>
185
+ {items.map((it) => (
186
+ <li key={it.id} style={c.listItem}>
187
+ <span>{it.title}</span>
188
+ <span style={c.badge}>{it.tag}</span>
189
+ </li>
190
+ ))}
191
+ </ul>
192
+ </section>
193
+
194
+ <section style={c.card}>
195
+ <h2 style={c.cardTitle}>New entry</h2>
196
+ <p style={{ ...c.subtitle, fontSize: "0.9rem", marginTop: "0.25rem" }}>Capture a quick thought.</p>
197
+ <div style={c.formRow}>
198
+ <input
199
+ style={c.input}
200
+ placeholder="What's on your mind?"
201
+ value={draft}
202
+ onChange={(e) => setDraft(e.target.value)}
203
+ />
204
+ <button style={c.button} type="button">
205
+ Save
206
+ </button>
207
+ </div>
208
+ <div style={c.buttonRow}>
209
+ <button style={c.button} type="button">
210
+ Primary
211
+ </button>
212
+ <button style={c.ghost} type="button">
213
+ Secondary
214
+ </button>
215
+ </div>
216
+ </section>
217
+ </div>
218
+ </div>
219
+ </main>
220
+ </>
221
+ );
222
+ }
@@ -0,0 +1,224 @@
1
+ import React, { useEffect, useState } from "react";
2
+
3
+ // Theme: Atelier Studio — auto-generated exemplar with prefers-color-scheme.
4
+ // Canonical palette: bg oklch(0.95 0.03 70), accent oklch(0.65 0.18 55).
5
+ // Inverse computed by flipping oklch/hex lightness; tune by hand if needed.
6
+
7
+ const THEME_CSS = `
8
+ :root {
9
+ --bg: oklch(0.95 0.03 70);
10
+ --accent: oklch(0.65 0.18 55);
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.03 70);
21
+ --accent: oklch(0.35 0.18 55);
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=Playfair+Display: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: "'Playfair Display', 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}>Atelier Studio</h1>
177
+ <p style={c.subtitle}>
178
+ An exemplar app on the Atelier Studio 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,216 @@
1
+ import React, { useEffect, useState } from "react";
2
+
3
+ // Theme: Atlas Reference — auto-generated exemplar with prefers-color-scheme.
4
+ // Canonical palette: bg oklch(1.00 0 0), accent oklch(0.62 0.24 25).
5
+ // Inverse computed by flipping oklch/hex lightness; tune by hand if needed.
6
+
7
+ const THEME_CSS = `
8
+ :root {
9
+ --bg: oklch(1.00 0 0);
10
+ --accent: oklch(0.62 0.24 25);
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 0);
21
+ --accent: oklch(0.38 0.24 25);
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(--font-sans)",
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}>Atlas Reference</h1>
169
+ <p style={c.subtitle}>
170
+ An exemplar app on the Atlas Reference theme — list, form, buttons rendered with the catalog tokens.
171
+ </p>
172
+ <div style={c.modeNote}>auto · light + dark via prefers-color-scheme</div>
173
+ </header>
174
+
175
+ <div style={c.grid}>
176
+ <section style={c.card}>
177
+ <h2 style={c.cardTitle}>Recent</h2>
178
+ <ul style={c.list}>
179
+ {items.map((it) => (
180
+ <li key={it.id} style={c.listItem}>
181
+ <span>{it.title}</span>
182
+ <span style={c.badge}>{it.tag}</span>
183
+ </li>
184
+ ))}
185
+ </ul>
186
+ </section>
187
+
188
+ <section style={c.card}>
189
+ <h2 style={c.cardTitle}>New entry</h2>
190
+ <p style={{ ...c.subtitle, fontSize: "0.9rem", marginTop: "0.25rem" }}>Capture a quick thought.</p>
191
+ <div style={c.formRow}>
192
+ <input
193
+ style={c.input}
194
+ placeholder="What's on your mind?"
195
+ value={draft}
196
+ onChange={(e) => setDraft(e.target.value)}
197
+ />
198
+ <button style={c.button} type="button">
199
+ Save
200
+ </button>
201
+ </div>
202
+ <div style={c.buttonRow}>
203
+ <button style={c.button} type="button">
204
+ Primary
205
+ </button>
206
+ <button style={c.ghost} type="button">
207
+ Secondary
208
+ </button>
209
+ </div>
210
+ </section>
211
+ </div>
212
+ </div>
213
+ </main>
214
+ </>
215
+ );
216
+ }