@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,216 @@
1
+ import React, { useEffect, useState } from "react";
2
+
3
+ // Theme: Capsule Split — auto-generated exemplar with prefers-color-scheme.
4
+ // Canonical palette: bg oklch(0.89 0.20 110), accent oklch(0.00 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.89 0.20 110);
10
+ --accent: oklch(0.00 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.11 0.20 110);
21
+ --accent: oklch(0.97 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(--font-main)",
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}>Capsule Split</h1>
169
+ <p style={c.subtitle}>
170
+ An exemplar app on the Capsule Split 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
+ }
@@ -0,0 +1,216 @@
1
+ import React, { useEffect, useState } from "react";
2
+
3
+ // Theme: Carbon Panel — auto-generated exemplar with prefers-color-scheme.
4
+ // Canonical palette: bg oklch(0.18 0.005 285), accent oklch(0.79 0.18 75).
5
+ // Inverse computed by flipping oklch/hex lightness; tune by hand if needed.
6
+
7
+ const THEME_CSS = `
8
+ :root {
9
+ --bg: oklch(0.18 0.005 285);
10
+ --accent: oklch(0.79 0.18 75);
11
+ --text: rgba(255, 255, 255, 0.92);
12
+ --muted: rgba(255, 255, 255, 0.55);
13
+ --border: rgba(255, 255, 255, 0.18);
14
+ --raised: rgba(255, 255, 255, 0.06);
15
+ --card-bg: rgba(255, 255, 255, 0.04);
16
+ --accent-text: #0a0a0a;
17
+ }
18
+ @media (prefers-color-scheme: light) {
19
+ :root {
20
+ --bg: oklch(0.82 0.005 285);
21
+ --accent: oklch(0.21 0.18 75);
22
+ --text: rgba(20, 20, 20, 0.92);
23
+ --muted: rgba(20, 20, 20, 0.5);
24
+ --border: rgba(20, 20, 20, 0.14);
25
+ --raised: rgba(255, 255, 255, 0.55);
26
+ --card-bg: rgba(255, 255, 255, 0.85);
27
+ --accent-text: #fafafa;
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: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
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}>Carbon Panel</h1>
169
+ <p style={c.subtitle}>
170
+ An exemplar app on the Carbon Panel theme — list, form, buttons rendered with the catalog tokens.
171
+ </p>
172
+ <div style={c.modeNote}>auto · dark + light 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
+ }
@@ -0,0 +1,253 @@
1
+ import React, { useEffect, useState } from "react";
2
+
3
+ // Theme: Chrome Terminal — black-canvas neon-red display.
4
+ // Dark canonical, light auto-flips via @media (prefers-color-scheme: light).
5
+ // Glow text-shadow drops to a faint drop in light mode.
6
+
7
+ const THEME_CSS = `
8
+ :root {
9
+ --bg: #000000;
10
+ --bg-surface: #171717;
11
+ --bg-panel: #1a050c;
12
+ --bg-card: #0e0508;
13
+ --neon-red: #ff003c;
14
+ --neon-yellow: #fcee0a;
15
+ --neon-cyan: #00f0ff;
16
+ --border: rgba(255, 0, 60, 0.45);
17
+ --border-dim: #3d1326;
18
+ --text: #ffffff;
19
+ --text-dim: #d1d1d1;
20
+ --text-muted: #a3a3a3;
21
+ --glow: 0 0 28px rgba(255,0,60,0.55), 0 0 6px rgba(255,0,60,0.9);
22
+ --bg-grad: radial-gradient(ellipse at top, #2a0a18 0%, #000 65%);
23
+ --shadow-btn: 0 0 14px rgba(255,0,60,0.55);
24
+ }
25
+ @media (prefers-color-scheme: light) {
26
+ :root {
27
+ --bg: oklch(0.97 0.005 0);
28
+ --bg-surface: #ffffff;
29
+ --bg-panel: oklch(0.95 0.02 25);
30
+ --bg-card: oklch(0.93 0.04 25);
31
+ --neon-red: oklch(0.55 0.24 28);
32
+ --neon-yellow: oklch(0.78 0.16 90);
33
+ --neon-cyan: oklch(0.50 0.15 220);
34
+ --border: oklch(0.55 0.24 28 / 0.55);
35
+ --border-dim: oklch(0.85 0.03 25);
36
+ --text: oklch(0.18 0.04 25);
37
+ --text-dim: oklch(0.32 0.04 25);
38
+ --text-muted: oklch(0.45 0.04 25);
39
+ --glow: 0 1px 0 oklch(0.55 0.24 28 / 0.25);
40
+ --bg-grad: radial-gradient(ellipse at top, oklch(0.95 0.04 25) 0%, oklch(0.97 0.005 0) 70%);
41
+ --shadow-btn: 0 0 0 1px oklch(0.55 0.24 28 / 0.35);
42
+ }
43
+ }
44
+ body { margin: 0; }
45
+ `;
46
+
47
+ export default function App() {
48
+ useEffect(() => {
49
+ const link = document.createElement("link");
50
+ link.rel = "stylesheet";
51
+ link.href =
52
+ "https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=Rajdhani:wght@400;500;700&family=Share+Tech+Mono&display=optional";
53
+ document.head.appendChild(link);
54
+ return () => link.remove();
55
+ }, []);
56
+
57
+ const [draft, setDraft] = useState("");
58
+
59
+ const c = {
60
+ page: {
61
+ minHeight: "100vh",
62
+ background: "var(--bg-grad)",
63
+ color: "var(--text)",
64
+ fontFamily: "'Rajdhani', sans-serif",
65
+ padding: "3rem 2rem 4rem",
66
+ },
67
+ container: { maxWidth: "60rem", margin: "0 auto" },
68
+ header: { display: "flex", flexDirection: "column", gap: "0.6rem", marginBottom: "2.5rem" },
69
+ eyebrow: {
70
+ fontFamily: "'Share Tech Mono', monospace",
71
+ fontSize: "0.78rem",
72
+ letterSpacing: "0.35em",
73
+ textTransform: "uppercase",
74
+ color: "var(--neon-yellow)",
75
+ },
76
+ title: {
77
+ fontFamily: "'Orbitron', sans-serif",
78
+ fontSize: "clamp(2.6rem, 11vw, 8.5rem)",
79
+ fontWeight: 900,
80
+ letterSpacing: "0.04em",
81
+ textTransform: "uppercase",
82
+ color: "var(--neon-red)",
83
+ textShadow: "var(--glow)",
84
+ margin: 0,
85
+ lineHeight: 0.9,
86
+ },
87
+ subtitle: {
88
+ fontSize: "0.95rem",
89
+ color: "var(--text-dim)",
90
+ maxWidth: "32rem",
91
+ lineHeight: 1.5,
92
+ },
93
+ modeNote: {
94
+ marginTop: "0.5rem",
95
+ fontFamily: "'Share Tech Mono', monospace",
96
+ fontSize: "0.72rem",
97
+ letterSpacing: "0.25em",
98
+ textTransform: "uppercase",
99
+ color: "var(--neon-cyan)",
100
+ },
101
+ grid: {
102
+ display: "grid",
103
+ gridTemplateColumns: "repeat(auto-fit, minmax(18rem, 1fr))",
104
+ gap: "1.25rem",
105
+ marginTop: "2.5rem",
106
+ },
107
+ card: {
108
+ background: "var(--bg-panel)",
109
+ border: "1px solid var(--border)",
110
+ borderRadius: 6,
111
+ padding: "1.4rem",
112
+ boxShadow: "inset 0 0 0 1px rgba(255,0,60,0.08)",
113
+ },
114
+ cardTitle: {
115
+ fontFamily: "'Share Tech Mono', monospace",
116
+ fontSize: "0.7rem",
117
+ letterSpacing: "0.25em",
118
+ textTransform: "uppercase",
119
+ color: "var(--neon-cyan)",
120
+ margin: "0 0 1rem",
121
+ },
122
+ list: { listStyle: "none", margin: 0, padding: 0, display: "flex", flexDirection: "column", gap: "0.5rem" },
123
+ listItem: {
124
+ display: "flex",
125
+ alignItems: "center",
126
+ justifyContent: "space-between",
127
+ gap: "0.75rem",
128
+ padding: "0.6rem 0.75rem",
129
+ border: "1px solid var(--border-dim)",
130
+ background: "var(--bg-card)",
131
+ fontFamily: "'Share Tech Mono', monospace",
132
+ fontSize: "0.85rem",
133
+ color: "var(--text)",
134
+ },
135
+ pillAlert: {
136
+ fontFamily: "'Share Tech Mono', monospace",
137
+ fontSize: "0.65rem",
138
+ padding: "0.15rem 0.5rem",
139
+ border: "1px solid var(--neon-red)",
140
+ color: "var(--neon-red)",
141
+ letterSpacing: "0.15em",
142
+ textTransform: "uppercase",
143
+ },
144
+ pillOk: {
145
+ fontFamily: "'Share Tech Mono', monospace",
146
+ fontSize: "0.65rem",
147
+ padding: "0.15rem 0.5rem",
148
+ border: "1px solid var(--neon-cyan)",
149
+ color: "var(--neon-cyan)",
150
+ letterSpacing: "0.15em",
151
+ textTransform: "uppercase",
152
+ },
153
+ formRow: { display: "flex", gap: "0.5rem", marginTop: "0.4rem" },
154
+ input: {
155
+ flex: 1,
156
+ background: "var(--bg)",
157
+ color: "var(--text)",
158
+ border: "1px solid var(--border-dim)",
159
+ borderRadius: 4,
160
+ padding: "0.65rem 0.85rem",
161
+ fontFamily: "'Share Tech Mono', monospace",
162
+ fontSize: "0.85rem",
163
+ outline: "none",
164
+ },
165
+ button: {
166
+ background: "var(--neon-red)",
167
+ color: "#fff",
168
+ border: "1px solid var(--neon-red)",
169
+ borderRadius: 4,
170
+ padding: "0.65rem 1.1rem",
171
+ fontFamily: "'Orbitron', sans-serif",
172
+ fontSize: "0.8rem",
173
+ fontWeight: 700,
174
+ letterSpacing: "0.15em",
175
+ textTransform: "uppercase",
176
+ cursor: "pointer",
177
+ boxShadow: "var(--shadow-btn)",
178
+ },
179
+ ghost: {
180
+ background: "transparent",
181
+ color: "var(--neon-yellow)",
182
+ border: "1px solid var(--neon-yellow)",
183
+ borderRadius: 4,
184
+ padding: "0.65rem 1.1rem",
185
+ fontFamily: "'Orbitron', sans-serif",
186
+ fontSize: "0.8rem",
187
+ fontWeight: 700,
188
+ letterSpacing: "0.15em",
189
+ textTransform: "uppercase",
190
+ cursor: "pointer",
191
+ },
192
+ buttonRow: { display: "flex", gap: "0.6rem", marginTop: "1.25rem", flexWrap: "wrap" },
193
+ };
194
+
195
+ const events = [
196
+ { id: 1, msg: "uplink synced", status: "ok" },
197
+ { id: 2, msg: "anomaly @ sector 7", status: "alert" },
198
+ { id: 3, msg: "telemetry cached", status: "ok" },
199
+ ];
200
+
201
+ return (
202
+ <>
203
+ <style>{THEME_CSS}</style>
204
+ <main id="app" style={c.page}>
205
+ <div style={c.container}>
206
+ <header style={c.header}>
207
+ <span style={c.eyebrow}>vibes.diy ⏵ theme</span>
208
+ <h1 style={c.title}>
209
+ Chrome
210
+ <br />
211
+ Terminal
212
+ </h1>
213
+ <p style={c.subtitle}>Neon-red display, monospaced telemetry, hard edges. Adapts to your system color scheme.</p>
214
+ <div style={c.modeNote}>auto · dark + light via prefers-color-scheme</div>
215
+ </header>
216
+
217
+ <div style={c.grid}>
218
+ <section style={c.card}>
219
+ <h2 style={c.cardTitle}>System Log</h2>
220
+ <ul style={c.list}>
221
+ {events.map((e) => (
222
+ <li key={e.id} style={c.listItem}>
223
+ <span>{e.msg}</span>
224
+ <span style={e.status === "alert" ? c.pillAlert : c.pillOk}>{e.status}</span>
225
+ </li>
226
+ ))}
227
+ </ul>
228
+ </section>
229
+
230
+ <section style={c.card}>
231
+ <h2 style={c.cardTitle}>Console Input</h2>
232
+ <p style={{ ...c.subtitle, marginTop: 0, fontSize: "0.85rem" }}>Issue a command.</p>
233
+ <div style={c.formRow}>
234
+ <input style={c.input} placeholder="> _" value={draft} onChange={(e) => setDraft(e.target.value)} />
235
+ <button style={c.button} type="button">
236
+ Run
237
+ </button>
238
+ </div>
239
+ <div style={c.buttonRow}>
240
+ <button style={c.button} type="button">
241
+ Engage
242
+ </button>
243
+ <button style={c.ghost} type="button">
244
+ Standby
245
+ </button>
246
+ </div>
247
+ </section>
248
+ </div>
249
+ </div>
250
+ </main>
251
+ </>
252
+ );
253
+ }