@lovenyberg/ove 0.5.1 → 0.5.2

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/docs/index.html CHANGED
@@ -7,20 +7,22 @@
7
7
  <title>Ove — Your Grumpy Dev Companion</title>
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com">
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
- <link href="https://fonts.googleapis.com/css2?family=Bitter:ital,wght@0,400;0,600;0,700;1,400&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,500;1,8..60,400&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
11
11
  <style>
12
12
  :root {
13
- --base: #1a1714;
14
- --surface: #232019;
15
- --raised: #2c2822;
16
- --copper: #c78d5e;
17
- --copper-light: #e0a870;
18
- --copper-dim: #8b6340;
19
- --text: #d4cdc4;
20
- --text-bright: #ede7df;
21
- --muted: #8a7e72;
22
- --subtle: #3a3430;
23
- --red: #b85c4e;
13
+ --bg: #1a1a1a;
14
+ --bg-panel: #161616;
15
+ --bg-item: #1e1e1e;
16
+ --bg-item-hover: #252525;
17
+ --border: #2a2a2a;
18
+ --border-light: #333;
19
+ --text: #e0e0e0;
20
+ --text-dim: #777;
21
+ --text-muted: #555;
22
+ --accent: #8ab4f8;
23
+ --green: #4ade80;
24
+ --red: #f28b82;
25
+ --amber: #fbbf24;
24
26
  }
25
27
 
26
28
  * { margin: 0; padding: 0; box-sizing: border-box; }
@@ -28,188 +30,175 @@
28
30
  html { scroll-behavior: smooth; }
29
31
 
30
32
  body {
31
- font-family: "Source Serif 4", Georgia, serif;
33
+ font-family: "Inter", system-ui, -apple-system, sans-serif;
32
34
  color: var(--text);
33
35
  line-height: 1.7;
34
- background: var(--base);
35
- font-size: 17px;
36
+ background: var(--bg);
37
+ font-size: 16px;
36
38
  -webkit-font-smoothing: antialiased;
37
39
  }
38
40
 
39
- /* Grain overlay */
40
- body::after {
41
- content: "";
42
- position: fixed;
43
- inset: 0;
44
- pointer-events: none;
45
- opacity: 0.03;
46
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
47
- z-index: 9999;
41
+ /* ─── HEADER ─── */
42
+ header {
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: space-between;
46
+ padding: 0.5rem 1rem;
47
+ border-bottom: 1px solid var(--border);
48
+ background: var(--bg-panel);
49
+ position: sticky;
50
+ top: 0;
51
+ z-index: 100;
52
+ }
53
+
54
+ .header-left {
55
+ display: flex;
56
+ align-items: center;
57
+ gap: 1rem;
58
+ }
59
+
60
+ .header-logo {
61
+ width: 24px;
62
+ height: 24px;
63
+ border-radius: 3px;
64
+ object-fit: cover;
65
+ }
66
+
67
+ .header-left h1 {
68
+ font-family: "JetBrains Mono", monospace;
69
+ font-size: 0.85rem;
70
+ font-weight: 600;
71
+ letter-spacing: 0.05em;
72
+ }
73
+
74
+ .nav-link {
75
+ color: var(--text-dim);
76
+ text-decoration: none;
77
+ font-family: "JetBrains Mono", monospace;
78
+ font-size: 0.7rem;
79
+ padding: 0.2rem 0.5rem;
80
+ border: 1px solid var(--border);
81
+ border-radius: 3px;
82
+ transition: all 0.15s;
83
+ }
84
+
85
+ .nav-link:hover {
86
+ color: var(--text);
87
+ border-color: var(--border-light);
88
+ background: var(--bg-item);
48
89
  }
49
90
 
50
91
  /* ─── HERO ─── */
51
92
  .hero {
52
- min-height: 100vh;
53
93
  display: flex;
54
94
  align-items: center;
55
95
  justify-content: center;
56
- position: relative;
57
- overflow: hidden;
58
- border-bottom: 1px solid var(--subtle);
59
- }
60
-
61
- .hero::before {
62
- content: "";
63
- position: absolute;
64
- inset: 0;
65
- background:
66
- radial-gradient(ellipse 60% 50% at 50% 40%, rgba(199, 141, 94, 0.06) 0%, transparent 70%),
67
- linear-gradient(180deg, var(--base) 0%, var(--surface) 100%);
96
+ padding: 64px 32px;
97
+ border-bottom: 1px solid var(--border);
68
98
  }
69
99
 
70
100
  .hero-inner {
71
- position: relative;
72
- z-index: 1;
73
101
  display: grid;
74
102
  grid-template-columns: auto 1fr;
75
- gap: 64px;
103
+ gap: 48px;
76
104
  align-items: center;
77
105
  max-width: 900px;
78
- padding: 40px 32px;
79
106
  }
80
107
 
81
108
  .hero-portrait {
82
- width: 220px;
83
- height: 220px;
109
+ width: 140px;
110
+ height: 140px;
84
111
  border-radius: 4px;
85
- border: 2px solid var(--subtle);
86
- box-shadow:
87
- 0 0 0 1px rgba(199, 141, 94, 0.1),
88
- 0 24px 48px rgba(0,0,0,0.4);
112
+ border: 1px solid var(--border);
113
+ box-shadow: 0 12px 32px rgba(0,0,0,0.3);
89
114
  object-fit: cover;
90
115
  }
91
116
 
92
117
  .hero-text h1 {
93
- font-family: "Bitter", Georgia, serif;
94
- font-size: 4rem;
118
+ font-family: "JetBrains Mono", monospace;
119
+ font-size: 2.5rem;
95
120
  font-weight: 700;
96
- color: var(--text-bright);
121
+ color: var(--text);
97
122
  letter-spacing: -0.02em;
98
123
  line-height: 1;
99
- margin-bottom: 8px;
124
+ margin-bottom: 6px;
100
125
  }
101
126
 
102
127
  .hero-subtitle {
103
- font-family: "Bitter", Georgia, serif;
104
- font-size: 1.1rem;
105
- color: var(--muted);
128
+ font-family: "JetBrains Mono", monospace;
129
+ font-size: 0.8rem;
130
+ color: var(--text-dim);
106
131
  font-weight: 400;
107
132
  letter-spacing: 0.08em;
108
133
  text-transform: uppercase;
109
- margin-bottom: 24px;
134
+ margin-bottom: 20px;
110
135
  }
111
136
 
112
137
  .hero-quote {
113
138
  font-style: italic;
114
- color: var(--copper);
115
- font-size: 1.25rem;
139
+ color: var(--text-dim);
140
+ font-size: 1.05rem;
116
141
  line-height: 1.5;
117
- margin-bottom: 32px;
142
+ margin-bottom: 24px;
118
143
  max-width: 420px;
119
144
  }
120
145
 
121
146
  .hero-quote span {
122
- color: var(--muted);
147
+ color: var(--text-muted);
123
148
  font-style: normal;
124
- font-size: 0.9rem;
125
- }
126
-
127
- .hero-actions {
128
- display: flex;
129
- gap: 16px;
130
- align-items: center;
149
+ font-size: 0.8rem;
131
150
  }
132
151
 
133
152
  .btn {
134
153
  display: inline-block;
135
- font-family: "Bitter", Georgia, serif;
136
- font-size: 0.95rem;
137
- font-weight: 600;
154
+ font-family: "JetBrains Mono", monospace;
155
+ font-size: 0.8rem;
156
+ font-weight: 500;
138
157
  text-decoration: none;
139
- padding: 12px 28px;
140
- border: 1px solid var(--copper-dim);
141
- color: var(--copper-light);
158
+ padding: 10px 24px;
159
+ border: 1px solid var(--border-light);
160
+ color: var(--accent);
142
161
  background: transparent;
143
- transition: all 0.2s ease;
162
+ border-radius: 3px;
163
+ transition: all 0.15s;
144
164
  letter-spacing: 0.02em;
145
165
  }
146
166
 
147
167
  .btn:hover {
148
- background: var(--copper);
149
- color: var(--base);
150
- border-color: var(--copper);
168
+ background: var(--accent);
169
+ color: var(--bg);
170
+ border-color: var(--accent);
151
171
  }
152
172
 
153
173
  .btn-ghost {
154
- border-color: var(--subtle);
155
- color: var(--muted);
174
+ border-color: var(--border);
175
+ color: var(--text-dim);
156
176
  }
157
177
 
158
178
  .btn-ghost:hover {
159
- border-color: var(--muted);
179
+ border-color: var(--text-dim);
160
180
  color: var(--text);
161
181
  background: transparent;
162
182
  }
163
183
 
164
- /* ─── SCROLL HINT ─── */
165
- .scroll-hint {
166
- position: absolute;
167
- bottom: 28px;
168
- left: 50%;
169
- transform: translateX(-50%);
170
- z-index: 1;
171
- display: flex;
172
- flex-direction: column;
173
- align-items: center;
174
- gap: 8px;
175
- color: var(--muted);
176
- font-family: "JetBrains Mono", monospace;
177
- font-size: 0.65rem;
178
- letter-spacing: 0.12em;
179
- text-transform: uppercase;
180
- animation: fadeUp 0.7s ease 0.7s both;
181
- }
182
-
183
- .scroll-hint svg {
184
- width: 18px;
185
- height: 18px;
186
- stroke: var(--copper-dim);
187
- animation: bobDown 2s ease-in-out infinite;
188
- }
189
-
190
- @keyframes bobDown {
191
- 0%, 100% { transform: translateY(0); }
192
- 50% { transform: translateY(5px); }
193
- }
194
-
195
184
  /* ─── INSTALL BAR ─── */
196
185
  .install-bar {
197
- background: var(--surface);
198
- border-bottom: 1px solid var(--subtle);
199
- padding: 20px 32px;
186
+ background: var(--bg-panel);
187
+ border-bottom: 1px solid var(--border);
188
+ padding: 16px 32px;
200
189
  text-align: center;
201
190
  }
202
191
 
203
192
  .install-bar code {
204
193
  font-family: "JetBrains Mono", monospace;
205
- font-size: 0.85rem;
206
- color: var(--copper-light);
194
+ font-size: 0.82rem;
195
+ color: var(--accent);
207
196
  letter-spacing: -0.02em;
208
197
  }
209
198
 
210
199
  .install-bar code::before {
211
200
  content: "$ ";
212
- color: var(--muted);
201
+ color: var(--text-muted);
213
202
  }
214
203
 
215
204
  /* ─── MAIN CONTENT ─── */
@@ -220,8 +209,8 @@
220
209
  }
221
210
 
222
211
  .section {
223
- padding: 72px 0;
224
- border-bottom: 1px solid var(--subtle);
212
+ padding: 64px 0;
213
+ border-bottom: 1px solid var(--border);
225
214
  }
226
215
 
227
216
  .section:last-child {
@@ -230,26 +219,26 @@
230
219
 
231
220
  /* ─── SECTION HEADERS ─── */
232
221
  h2 {
233
- font-family: "Bitter", Georgia, serif;
234
- font-size: 1.6rem;
222
+ font-family: "JetBrains Mono", monospace;
223
+ font-size: 1.3rem;
235
224
  font-weight: 700;
236
- color: var(--text-bright);
225
+ color: var(--text);
237
226
  margin-bottom: 8px;
238
227
  letter-spacing: -0.01em;
239
228
  }
240
229
 
241
230
  .section-note {
242
- color: var(--muted);
231
+ color: var(--text-dim);
243
232
  font-style: italic;
244
233
  margin-bottom: 32px;
245
- font-size: 0.95rem;
234
+ font-size: 0.9rem;
246
235
  }
247
236
 
248
237
  h3 {
249
- font-family: "Bitter", Georgia, serif;
250
- font-size: 1.05rem;
251
- font-weight: 600;
252
- color: var(--copper);
238
+ font-family: "JetBrains Mono", monospace;
239
+ font-size: 0.9rem;
240
+ font-weight: 500;
241
+ color: var(--accent);
253
242
  margin: 32px 0 10px;
254
243
  letter-spacing: 0.01em;
255
244
  }
@@ -263,80 +252,81 @@
263
252
  .features {
264
253
  display: grid;
265
254
  grid-template-columns: 1fr 1fr;
266
- gap: 2px;
267
- background: var(--subtle);
268
- border: 1px solid var(--subtle);
255
+ gap: 1px;
256
+ background: var(--border);
257
+ border: 1px solid var(--border);
269
258
  margin-top: 32px;
270
259
  }
271
260
 
272
261
  .feature {
273
- padding: 28px 24px;
274
- background: var(--surface);
262
+ padding: 24px 20px;
263
+ background: var(--bg);
275
264
  }
276
265
 
277
266
  .feature-label {
278
267
  font-family: "JetBrains Mono", monospace;
279
- font-size: 0.7rem;
268
+ font-size: 0.65rem;
280
269
  text-transform: uppercase;
281
270
  letter-spacing: 0.12em;
282
- color: var(--copper-dim);
283
- margin-bottom: 10px;
271
+ color: var(--text-muted);
272
+ margin-bottom: 8px;
284
273
  }
285
274
 
286
275
  .feature h3 {
287
- font-family: "Bitter", Georgia, serif;
288
- font-size: 1.1rem;
289
- color: var(--text-bright);
276
+ font-family: "JetBrains Mono", monospace;
277
+ font-size: 0.95rem;
278
+ color: var(--text);
290
279
  margin: 0 0 8px;
291
- font-weight: 600;
280
+ font-weight: 500;
292
281
  }
293
282
 
294
283
  .feature p {
295
- color: var(--muted);
296
- font-size: 0.9rem;
284
+ color: var(--text-dim);
285
+ font-size: 0.85rem;
297
286
  line-height: 1.55;
298
- margin-bottom: 12px;
287
+ margin-bottom: 10px;
299
288
  }
300
289
 
301
290
  .feature code {
302
291
  font-family: "JetBrains Mono", monospace;
303
- font-size: 0.78rem;
304
- color: var(--copper-light);
305
- background: var(--raised);
292
+ font-size: 0.75rem;
293
+ color: var(--accent);
294
+ background: var(--bg-item);
306
295
  padding: 3px 8px;
307
- border: 1px solid var(--subtle);
296
+ border: 1px solid var(--border);
308
297
  display: inline-block;
309
298
  }
310
299
 
311
300
  /* ─── PERSONALITY QUOTES ─── */
312
301
  .ove-says {
313
- border-left: 2px solid var(--copper-dim);
314
- padding: 16px 0 16px 20px;
315
- margin: 36px 0;
302
+ border-left: 2px solid var(--accent);
303
+ padding: 14px 0 14px 20px;
304
+ margin: 32px 0;
316
305
  font-style: italic;
317
- color: var(--copper);
318
- font-size: 1.05rem;
306
+ color: var(--text-dim);
307
+ font-size: 0.95rem;
319
308
  }
320
309
 
321
310
  .ove-says .attr {
322
311
  display: block;
323
312
  font-style: normal;
324
- color: var(--muted);
325
- font-size: 0.8rem;
313
+ color: var(--text-muted);
314
+ font-size: 0.75rem;
326
315
  margin-top: 6px;
327
316
  font-family: "JetBrains Mono", monospace;
328
317
  }
329
318
 
330
319
  /* ─── CODE BLOCKS ─── */
331
320
  pre {
332
- background: var(--surface);
333
- border: 1px solid var(--subtle);
334
- padding: 18px 20px;
321
+ background: var(--bg-panel);
322
+ border: 1px solid var(--border);
323
+ padding: 16px 18px;
335
324
  overflow-x: auto;
336
- font-size: 0.82rem;
325
+ font-size: 0.8rem;
337
326
  margin: 14px 0;
338
327
  line-height: 1.65;
339
328
  position: relative;
329
+ border-radius: 3px;
340
330
  }
341
331
 
342
332
  pre::before {
@@ -348,11 +338,12 @@
348
338
  font-size: 0.6rem;
349
339
  text-transform: uppercase;
350
340
  letter-spacing: 0.1em;
351
- color: var(--muted);
341
+ color: var(--text-muted);
352
342
  padding: 4px 10px;
353
- background: var(--raised);
354
- border-left: 1px solid var(--subtle);
355
- border-bottom: 1px solid var(--subtle);
343
+ background: var(--bg-item);
344
+ border-left: 1px solid var(--border);
345
+ border-bottom: 1px solid var(--border);
346
+ border-radius: 0 3px 0 3px;
356
347
  }
357
348
 
358
349
  code {
@@ -366,11 +357,12 @@
366
357
  }
367
358
 
368
359
  p code {
369
- background: var(--raised);
370
- border: 1px solid var(--subtle);
360
+ background: var(--bg-item);
361
+ border: 1px solid var(--border);
371
362
  padding: 1px 6px;
372
- color: var(--copper-light);
363
+ color: var(--accent);
373
364
  font-size: 0.82em;
365
+ border-radius: 2px;
374
366
  }
375
367
 
376
368
  /* ─── LISTS ─── */
@@ -385,7 +377,7 @@
385
377
  counter-increment: step;
386
378
  padding: 8px 0 8px 36px;
387
379
  position: relative;
388
- border-bottom: 1px solid var(--subtle);
380
+ border-bottom: 1px solid var(--border);
389
381
  font-size: 0.95rem;
390
382
  }
391
383
 
@@ -399,25 +391,25 @@
399
391
  left: 0;
400
392
  font-family: "JetBrains Mono", monospace;
401
393
  font-size: 0.75rem;
402
- color: var(--copper-dim);
394
+ color: var(--text-muted);
403
395
  width: 22px;
404
396
  text-align: right;
405
397
  }
406
398
 
407
399
  /* ─── LINKS ─── */
408
400
  a {
409
- color: var(--copper);
401
+ color: var(--accent);
410
402
  text-decoration: none;
411
- border-bottom: 1px solid var(--subtle);
403
+ border-bottom: 1px solid var(--border);
412
404
  transition: border-color 0.15s;
413
405
  }
414
406
 
415
407
  a:hover {
416
- border-bottom-color: var(--copper);
408
+ border-bottom-color: var(--accent);
417
409
  }
418
410
 
419
411
  strong {
420
- color: var(--text-bright);
412
+ color: var(--text);
421
413
  font-weight: 500;
422
414
  }
423
415
 
@@ -434,14 +426,14 @@
434
426
  display: grid;
435
427
  grid-template-columns: auto 1fr;
436
428
  gap: 0;
437
- border: 1px solid var(--subtle);
429
+ border: 1px solid var(--border);
438
430
  font-size: 0.88rem;
439
431
  }
440
432
 
441
433
  .cmd-grid dt,
442
434
  .cmd-grid dd {
443
435
  padding: 10px 16px;
444
- border-bottom: 1px solid var(--subtle);
436
+ border-bottom: 1px solid var(--border);
445
437
  }
446
438
 
447
439
  .cmd-grid dt:last-of-type,
@@ -451,15 +443,15 @@
451
443
 
452
444
  .cmd-grid dt {
453
445
  font-family: "JetBrains Mono", monospace;
454
- font-size: 0.8rem;
455
- color: var(--copper-light);
456
- background: var(--surface);
446
+ font-size: 0.78rem;
447
+ color: var(--accent);
448
+ background: var(--bg-panel);
457
449
  white-space: nowrap;
458
- border-right: 1px solid var(--subtle);
450
+ border-right: 1px solid var(--border);
459
451
  }
460
452
 
461
453
  .cmd-grid dd {
462
- color: var(--muted);
454
+ color: var(--text-dim);
463
455
  }
464
456
 
465
457
  /* ─── HOW IT WORKS ─── */
@@ -473,7 +465,7 @@
473
465
  display: flex;
474
466
  gap: 16px;
475
467
  padding: 14px 0;
476
- border-bottom: 1px solid var(--subtle);
468
+ border-bottom: 1px solid var(--border);
477
469
  align-items: baseline;
478
470
  font-size: 0.95rem;
479
471
  }
@@ -485,14 +477,14 @@
485
477
  .pipeline .step-n {
486
478
  font-family: "JetBrains Mono", monospace;
487
479
  font-size: 0.7rem;
488
- color: var(--copper-dim);
480
+ color: var(--text-muted);
489
481
  flex-shrink: 0;
490
482
  width: 16px;
491
483
  text-align: right;
492
484
  }
493
485
 
494
486
  .pipeline .step-arrow {
495
- color: var(--subtle);
487
+ color: var(--border-light);
496
488
  flex-shrink: 0;
497
489
  font-size: 0.8rem;
498
490
  }
@@ -501,20 +493,20 @@
501
493
  footer {
502
494
  padding: 40px 32px;
503
495
  text-align: center;
504
- color: var(--muted);
505
- font-size: 0.82rem;
506
- border-top: 1px solid var(--subtle);
496
+ color: var(--text-dim);
497
+ font-size: 0.78rem;
498
+ border-top: 1px solid var(--border);
507
499
  font-family: "JetBrains Mono", monospace;
508
500
  letter-spacing: 0.02em;
509
501
  }
510
502
 
511
503
  footer a {
512
- color: var(--copper-dim);
504
+ color: var(--text-muted);
513
505
  border-bottom: none;
514
506
  }
515
507
 
516
508
  footer a:hover {
517
- color: var(--copper);
509
+ color: var(--accent);
518
510
  }
519
511
 
520
512
  /* ─── RESPONSIVE ─── */
@@ -525,8 +517,8 @@
525
517
  gap: 32px;
526
518
  }
527
519
  .hero-portrait {
528
- width: 160px;
529
- height: 160px;
520
+ width: 120px;
521
+ height: 120px;
530
522
  margin: 0 auto;
531
523
  }
532
524
  .hero-quote {
@@ -536,7 +528,7 @@
536
528
  justify-content: center;
537
529
  }
538
530
  .hero-text h1 {
539
- font-size: 3rem;
531
+ font-size: 2rem;
540
532
  }
541
533
  .features {
542
534
  grid-template-columns: 1fr;
@@ -587,6 +579,18 @@
587
579
  </head>
588
580
  <body>
589
581
 
582
+ <header>
583
+ <div class="header-left">
584
+ <img class="header-logo" src="logo.png" alt="">
585
+ <h1>ove</h1>
586
+ <a class="nav-link" href="#features">features</a>
587
+ <a class="nav-link" href="#getting-started">setup</a>
588
+ <a class="nav-link" href="#commands">commands</a>
589
+ <a class="nav-link" href="#deploy">deploy</a>
590
+ </div>
591
+ <a class="nav-link" href="https://github.com/jacksoncage/ove">github</a>
592
+ </header>
593
+
590
594
  <section class="hero">
591
595
  <div class="hero-inner">
592
596
  <img class="hero-portrait" src="logo.png" alt="Ove, grumpy but reliable">
@@ -603,12 +607,6 @@
603
607
  </div>
604
608
  </div>
605
609
  </div>
606
- <a href="#getting-started" class="scroll-hint">
607
- scroll
608
- <svg viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
609
- <path d="M12 5v14M19 12l-7 7-7-7"/>
610
- </svg>
611
- </a>
612
610
  </section>
613
611
 
614
612
  <div class="install-bar">
@@ -617,7 +615,7 @@
617
615
 
618
616
  <div class="container">
619
617
 
620
- <section class="section">
618
+ <section class="section" id="features">
621
619
  <h2>What Ove Does</h2>
622
620
  <p class="section-note">He grumbles, but he gets it done. Properly.</p>
623
621
 
@@ -753,7 +751,7 @@ sudo systemctl enable --now ove</pre>
753
751
  </div>
754
752
  </section>
755
753
 
756
- <section class="section">
754
+ <section class="section" id="commands">
757
755
  <h2>Commands</h2>
758
756
  <p class="section-note">Shortcuts for common tasks. You can also just type what you need in plain language.</p>
759
757