@vojtaholik/create-static-kit 1.0.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/package.json +6 -37
  2. package/src/index.ts +41 -0
  3. package/template/blocks/feature-grid.block.html +28 -0
  4. package/template/blocks/feature-grid.block.ts +32 -0
  5. package/template/blocks/gen/feature-grid.render.ts +92 -0
  6. package/template/blocks/gen/hero.render.ts +79 -0
  7. package/template/blocks/gen/index.ts +4 -0
  8. package/template/blocks/gen/latest-posts.render.ts +114 -0
  9. package/template/blocks/gen/text-section.render.ts +69 -0
  10. package/template/blocks/hero.block.html +31 -0
  11. package/template/blocks/hero.block.ts +40 -0
  12. package/template/blocks/index.ts +31 -0
  13. package/template/blocks/latest-posts.block.html +38 -0
  14. package/template/blocks/latest-posts.block.ts +45 -0
  15. package/template/blocks/text-section.block.html +18 -0
  16. package/template/blocks/text-section.block.ts +25 -0
  17. package/template/cms-blocks.ts +197 -0
  18. package/template/package.json +21 -0
  19. package/template/public/css/styles.css +589 -0
  20. package/template/public/js/dev-overlay.js +366 -0
  21. package/template/public/js/index.js +35 -0
  22. package/template/public/sprite.svg +6 -0
  23. package/template/public/svg/magic-wand.svg +4 -0
  24. package/template/site/pages/about.page.ts +91 -0
  25. package/template/site/pages/base.html +38 -0
  26. package/template/site/pages/index.page.ts +107 -0
  27. package/template/site/pages/index.ts +16 -0
  28. package/template/static-kit.config.ts +10 -0
  29. package/template/tsconfig.json +23 -0
  30. package/bin/create-static-kit.js +0 -3
  31. package/dist/cli.d.ts +0 -3
  32. package/dist/cli.d.ts.map +0 -1
  33. package/dist/cli.js +0 -488
  34. package/templates/default/.cursor/rules/configuration.mdc +0 -20
  35. package/templates/default/.cursor/rules/figma-integration.mdc +0 -22
  36. package/templates/default/.cursor/rules/html-components.mdc +0 -24
  37. package/templates/default/.cursor/rules/html-pages.mdc +0 -22
  38. package/templates/default/.cursor/rules/inline-tailwind-to-bem-with-apply-directive.mdc +0 -218
  39. package/templates/default/.cursor/rules/project-overview.mdc +0 -30
  40. package/templates/default/.cursor/rules/public-assets.mdc +0 -22
  41. package/templates/default/.cursor/rules/scss-styles.mdc +0 -22
  42. package/templates/default/.cursor/rules/svg-icons.mdc +0 -22
  43. package/templates/default/.cursor/rules/typescript-js.mdc +0 -23
  44. package/templates/default/public/favicon.ico +0 -1
  45. package/templates/default/src/components/button.html +0 -1
  46. package/templates/default/src/components/feature-card.html +0 -8
  47. package/templates/default/src/components/footer.html +0 -5
  48. package/templates/default/src/components/navigation.html +0 -11
  49. package/templates/default/src/icons/ui/star.svg +0 -3
  50. package/templates/default/src/js/index.ts +0 -28
  51. package/templates/default/src/pages/about.html +0 -24
  52. package/templates/default/src/pages/index.html +0 -23
  53. package/templates/default/src/styles/main.scss +0 -210
  54. package/templates/default/tsconfig.json +0 -19
  55. package/templates/minimal/.cursor/rules/configuration.mdc +0 -20
  56. package/templates/minimal/.cursor/rules/figma-integration.mdc +0 -22
  57. package/templates/minimal/.cursor/rules/html-components.mdc +0 -24
  58. package/templates/minimal/.cursor/rules/html-pages.mdc +0 -22
  59. package/templates/minimal/.cursor/rules/inline-tailwind-to-bem-with-apply-directive.mdc +0 -218
  60. package/templates/minimal/.cursor/rules/project-overview.mdc +0 -30
  61. package/templates/minimal/.cursor/rules/public-assets.mdc +0 -22
  62. package/templates/minimal/.cursor/rules/scss-styles.mdc +0 -22
  63. package/templates/minimal/.cursor/rules/svg-icons.mdc +0 -22
  64. package/templates/minimal/.cursor/rules/typescript-js.mdc +0 -23
  65. package/templates/minimal/public/favicon.ico +0 -1
  66. package/templates/minimal/src/components/footer.html +0 -3
  67. package/templates/minimal/src/components/header.html +0 -6
  68. package/templates/minimal/src/js/index.ts +0 -9
  69. package/templates/minimal/src/pages/index.html +0 -15
  70. package/templates/minimal/src/styles/main.scss +0 -77
  71. package/templates/minimal/tsconfig.json +0 -19
@@ -0,0 +1,589 @@
1
+ /* ==========================================================================
2
+ Static Kit - Site Design System
3
+ ========================================================================== */
4
+
5
+ /* --------------------------------------------------------------------------
6
+ Design Tokens
7
+ -------------------------------------------------------------------------- */
8
+
9
+ :root {
10
+ /* Colors */
11
+ --color-bg: #ffffff;
12
+ --color-bg-raised: #f8f9fa;
13
+ --color-bg-accent: #1a1a2e;
14
+ --color-bg-inverted: #0f0f1a;
15
+
16
+ --color-text: #1a1a2e;
17
+ --color-text-muted: #6c757d;
18
+ --color-text-inverted: #ffffff;
19
+ --color-text-accent: #ffffff;
20
+
21
+ --color-primary: #6366f1;
22
+ --color-primary-hover: #4f46e5;
23
+ --color-secondary: #e2e8f0;
24
+ --color-secondary-hover: #cbd5e1;
25
+
26
+ --color-border: #e2e8f0;
27
+ --color-border-inverted: #374151;
28
+
29
+ /* Typography */
30
+ --font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
31
+ "Helvetica Neue", Arial, sans-serif;
32
+ --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
33
+ "Liberation Mono", monospace;
34
+
35
+ --text-xs: 0.75rem;
36
+ --text-sm: 0.875rem;
37
+ --text-base: 1rem;
38
+ --text-lg: 1.125rem;
39
+ --text-xl: 1.25rem;
40
+ --text-2xl: 1.5rem;
41
+ --text-3xl: 1.875rem;
42
+ --text-4xl: 2.25rem;
43
+ --text-5xl: 3rem;
44
+
45
+ --leading-tight: 1.25;
46
+ --leading-normal: 1.5;
47
+ --leading-relaxed: 1.625;
48
+
49
+ /* Spacing */
50
+ --space-1: 0.25rem;
51
+ --space-2: 0.5rem;
52
+ --space-3: 0.75rem;
53
+ --space-4: 1rem;
54
+ --space-5: 1.25rem;
55
+ --space-6: 1.5rem;
56
+ --space-8: 2rem;
57
+ --space-10: 2.5rem;
58
+ --space-12: 3rem;
59
+ --space-16: 4rem;
60
+ --space-20: 5rem;
61
+ --space-24: 6rem;
62
+
63
+ /* Borders */
64
+ --radius-sm: 0.25rem;
65
+ --radius-md: 0.5rem;
66
+ --radius-lg: 0.75rem;
67
+ --radius-xl: 1rem;
68
+ --radius-full: 9999px;
69
+
70
+ /* Shadows */
71
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
72
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
73
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),
74
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
75
+
76
+ /* Transitions */
77
+ --transition-fast: 150ms ease;
78
+ --transition-base: 200ms ease;
79
+ --transition-slow: 300ms ease;
80
+
81
+ /* Container widths */
82
+ --container-narrow: 42rem;
83
+ --container-default: 64rem;
84
+ --container-wide: 80rem;
85
+ }
86
+
87
+ /* Density-based spacing */
88
+ [data-density="compact"] {
89
+ --section-padding-y: var(--space-8);
90
+ --stack-gap: var(--space-3);
91
+ --card-padding: var(--space-4);
92
+ }
93
+
94
+ [data-density="comfortable"] {
95
+ --section-padding-y: var(--space-16);
96
+ --stack-gap: var(--space-4);
97
+ --card-padding: var(--space-6);
98
+ }
99
+
100
+ [data-density="relaxed"] {
101
+ --section-padding-y: var(--space-24);
102
+ --stack-gap: var(--space-6);
103
+ --card-padding: var(--space-8);
104
+ }
105
+
106
+ /* --------------------------------------------------------------------------
107
+ Reset & Base
108
+ -------------------------------------------------------------------------- */
109
+
110
+ *,
111
+ *::before,
112
+ *::after {
113
+ box-sizing: border-box;
114
+ }
115
+
116
+ * {
117
+ margin: 0;
118
+ }
119
+
120
+ html {
121
+ -webkit-text-size-adjust: 100%;
122
+ font-feature-settings: "kern" 1, "liga" 1;
123
+ }
124
+
125
+ body {
126
+ font-family: var(--font-sans);
127
+ font-size: var(--text-base);
128
+ line-height: var(--leading-normal);
129
+ color: var(--color-text);
130
+ background: var(--color-bg);
131
+ -webkit-font-smoothing: antialiased;
132
+ -moz-osx-font-smoothing: grayscale;
133
+ }
134
+
135
+ img,
136
+ picture,
137
+ video,
138
+ canvas,
139
+ svg {
140
+ display: block;
141
+ max-width: 100%;
142
+ }
143
+
144
+ input,
145
+ button,
146
+ textarea,
147
+ select {
148
+ font: inherit;
149
+ }
150
+
151
+ /* --------------------------------------------------------------------------
152
+ Typography
153
+ -------------------------------------------------------------------------- */
154
+
155
+ .h1 {
156
+ font-size: var(--text-5xl);
157
+ font-weight: 700;
158
+ line-height: var(--leading-tight);
159
+ letter-spacing: -0.02em;
160
+ }
161
+
162
+ .h2 {
163
+ font-size: var(--text-3xl);
164
+ font-weight: 600;
165
+ line-height: var(--leading-tight);
166
+ letter-spacing: -0.01em;
167
+ }
168
+
169
+ .h3 {
170
+ font-size: var(--text-xl);
171
+ font-weight: 600;
172
+ line-height: var(--leading-tight);
173
+ }
174
+
175
+ .text-body {
176
+ font-size: var(--text-lg);
177
+ line-height: var(--leading-relaxed);
178
+ color: var(--color-text-muted);
179
+ }
180
+
181
+ .eyebrow {
182
+ font-size: var(--text-sm);
183
+ font-weight: 600;
184
+ text-transform: uppercase;
185
+ letter-spacing: 0.1em;
186
+ color: var(--color-primary);
187
+ }
188
+
189
+ /* Prose for rich text content */
190
+ .prose {
191
+ font-size: var(--text-lg);
192
+ line-height: var(--leading-relaxed);
193
+ }
194
+
195
+ .prose p {
196
+ margin-bottom: var(--space-4);
197
+ }
198
+
199
+ .prose p:last-child {
200
+ margin-bottom: 0;
201
+ }
202
+
203
+ .prose ul,
204
+ .prose ol {
205
+ margin-bottom: var(--space-4);
206
+ padding-left: var(--space-6);
207
+ }
208
+
209
+ .prose li {
210
+ margin-bottom: var(--space-2);
211
+ }
212
+
213
+ .prose a {
214
+ color: var(--color-primary);
215
+ text-decoration: underline;
216
+ }
217
+
218
+ .prose a:hover {
219
+ color: var(--color-primary-hover);
220
+ }
221
+
222
+ /* --------------------------------------------------------------------------
223
+ Layout
224
+ -------------------------------------------------------------------------- */
225
+
226
+ .container {
227
+ width: 100%;
228
+ max-width: var(--container-default);
229
+ margin: 0 auto;
230
+ padding: 0 var(--space-6);
231
+ }
232
+
233
+ .container--narrow {
234
+ max-width: var(--container-narrow);
235
+ }
236
+
237
+ .container--default {
238
+ max-width: var(--container-default);
239
+ }
240
+
241
+ .container--wide {
242
+ max-width: var(--container-wide);
243
+ }
244
+
245
+ /* --------------------------------------------------------------------------
246
+ Sections
247
+ -------------------------------------------------------------------------- */
248
+
249
+ .section {
250
+ padding: var(--section-padding-y, var(--space-16)) 0;
251
+ }
252
+
253
+ .section__header {
254
+ margin-bottom: var(--space-12);
255
+ }
256
+
257
+ .section__header--left {
258
+ text-align: left;
259
+ }
260
+
261
+ .section__header--center {
262
+ text-align: center;
263
+ }
264
+
265
+ .section__header--split {
266
+ display: flex;
267
+ justify-content: space-between;
268
+ align-items: flex-end;
269
+ }
270
+
271
+ .section__footer {
272
+ margin-top: var(--space-12);
273
+ text-align: center;
274
+ }
275
+
276
+ /* Section tones */
277
+ .section--tone-surface {
278
+ background: var(--color-bg);
279
+ color: var(--color-text);
280
+ }
281
+
282
+ .section--tone-raised {
283
+ background: var(--color-bg-raised);
284
+ color: var(--color-text);
285
+ }
286
+
287
+ .section--tone-accent {
288
+ background: var(--color-bg-accent);
289
+ color: var(--color-text-accent);
290
+ }
291
+
292
+ .section--tone-accent .text-body,
293
+ .section--tone-accent .eyebrow {
294
+ color: rgba(255, 255, 255, 0.8);
295
+ }
296
+
297
+ .section--tone-accent .eyebrow {
298
+ color: rgba(255, 255, 255, 0.9);
299
+ }
300
+
301
+ .section--tone-inverted {
302
+ background: var(--color-bg-inverted);
303
+ color: var(--color-text-inverted);
304
+ }
305
+
306
+ .section--tone-inverted .text-body {
307
+ color: rgba(255, 255, 255, 0.7);
308
+ }
309
+
310
+ /* --------------------------------------------------------------------------
311
+ Grid
312
+ -------------------------------------------------------------------------- */
313
+
314
+ .grid {
315
+ display: grid;
316
+ gap: var(--space-8);
317
+ }
318
+
319
+ .grid--2 {
320
+ grid-template-columns: repeat(2, 1fr);
321
+ }
322
+
323
+ .grid--3 {
324
+ grid-template-columns: repeat(3, 1fr);
325
+ }
326
+
327
+ .grid--4 {
328
+ grid-template-columns: repeat(4, 1fr);
329
+ }
330
+
331
+ @media (max-width: 768px) {
332
+ .grid--2,
333
+ .grid--3,
334
+ .grid--4 {
335
+ grid-template-columns: 1fr;
336
+ }
337
+ }
338
+
339
+ @media (min-width: 769px) and (max-width: 1024px) {
340
+ .grid--3,
341
+ .grid--4 {
342
+ grid-template-columns: repeat(2, 1fr);
343
+ }
344
+ }
345
+
346
+ /* --------------------------------------------------------------------------
347
+ Cards
348
+ -------------------------------------------------------------------------- */
349
+
350
+ .card {
351
+ padding: var(--card-padding, var(--space-6));
352
+ background: var(--color-bg);
353
+ border-radius: var(--radius-lg);
354
+ box-shadow: var(--shadow-sm);
355
+ border: 1px solid var(--color-border);
356
+ }
357
+
358
+ .card__icon {
359
+ font-size: var(--text-3xl);
360
+ margin-bottom: var(--space-4);
361
+ display: block;
362
+ }
363
+
364
+ .card__title {
365
+ margin-bottom: var(--space-2);
366
+ }
367
+
368
+ .card__description {
369
+ margin-bottom: var(--space-4);
370
+ }
371
+
372
+ .card__link {
373
+ color: var(--color-primary);
374
+ font-weight: 500;
375
+ text-decoration: none;
376
+ }
377
+
378
+ .card__link:hover {
379
+ text-decoration: underline;
380
+ }
381
+
382
+ /* Post card variant */
383
+ .card--post {
384
+ padding: 0;
385
+ overflow: hidden;
386
+ }
387
+
388
+ .card--post .card__image img {
389
+ width: 100%;
390
+ height: 200px;
391
+ object-fit: cover;
392
+ }
393
+
394
+ .card--post .card__body {
395
+ padding: var(--card-padding, var(--space-6));
396
+ }
397
+
398
+ .card__date {
399
+ font-size: var(--text-sm);
400
+ color: var(--color-text-muted);
401
+ margin-bottom: var(--space-2);
402
+ display: block;
403
+ }
404
+
405
+ .card__excerpt {
406
+ color: var(--color-text-muted);
407
+ }
408
+
409
+ /* --------------------------------------------------------------------------
410
+ Hero
411
+ -------------------------------------------------------------------------- */
412
+
413
+ .section--hero {
414
+ padding: var(--space-24) 0;
415
+ }
416
+
417
+ .hero__content {
418
+ display: flex;
419
+ flex-direction: column;
420
+ gap: var(--space-6);
421
+ }
422
+
423
+ .hero__content--left {
424
+ align-items: flex-start;
425
+ text-align: left;
426
+ }
427
+
428
+ .hero__content--center {
429
+ align-items: center;
430
+ text-align: center;
431
+ }
432
+
433
+ .hero__content--split {
434
+ align-items: flex-start;
435
+ text-align: left;
436
+ }
437
+
438
+ .hero__headline {
439
+ max-width: 20ch;
440
+ }
441
+
442
+ .hero__content--center .hero__headline {
443
+ max-width: none;
444
+ }
445
+
446
+ .hero__subheadline {
447
+ max-width: 50ch;
448
+ }
449
+
450
+ .hero__actions {
451
+ display: flex;
452
+ gap: var(--space-4);
453
+ flex-wrap: wrap;
454
+ margin-top: var(--space-4);
455
+ }
456
+
457
+ /* --------------------------------------------------------------------------
458
+ Text Section
459
+ -------------------------------------------------------------------------- */
460
+
461
+ .text-section {
462
+ display: flex;
463
+ flex-direction: column;
464
+ gap: var(--space-4);
465
+ }
466
+
467
+ .text-section--left {
468
+ align-items: flex-start;
469
+ text-align: left;
470
+ }
471
+
472
+ .text-section--center {
473
+ align-items: center;
474
+ text-align: center;
475
+ }
476
+
477
+ .text-section--center .prose {
478
+ text-align: left;
479
+ }
480
+
481
+ .text-section__cta {
482
+ margin-top: var(--space-6);
483
+ }
484
+
485
+ /* --------------------------------------------------------------------------
486
+ Buttons
487
+ -------------------------------------------------------------------------- */
488
+
489
+ .btn {
490
+ display: inline-flex;
491
+ align-items: center;
492
+ justify-content: center;
493
+ padding: var(--space-3) var(--space-6);
494
+ font-size: var(--text-base);
495
+ font-weight: 500;
496
+ text-decoration: none;
497
+ border-radius: var(--radius-md);
498
+ border: none;
499
+ cursor: pointer;
500
+ transition: background var(--transition-fast),
501
+ transform var(--transition-fast);
502
+ }
503
+
504
+ .btn:active {
505
+ transform: scale(0.98);
506
+ }
507
+
508
+ .btn--primary {
509
+ background: var(--color-primary);
510
+ color: white;
511
+ }
512
+
513
+ .btn--primary:hover {
514
+ background: var(--color-primary-hover);
515
+ }
516
+
517
+ .btn--secondary {
518
+ background: var(--color-secondary);
519
+ color: var(--color-text);
520
+ }
521
+
522
+ .btn--secondary:hover {
523
+ background: var(--color-secondary-hover);
524
+ }
525
+
526
+ /* Light buttons for dark backgrounds */
527
+ .section--tone-accent .btn--secondary,
528
+ .section--tone-inverted .btn--secondary {
529
+ background: rgba(255, 255, 255, 0.1);
530
+ color: white;
531
+ border: 1px solid rgba(255, 255, 255, 0.2);
532
+ }
533
+
534
+ .section--tone-accent .btn--secondary:hover,
535
+ .section--tone-inverted .btn--secondary:hover {
536
+ background: rgba(255, 255, 255, 0.2);
537
+ }
538
+
539
+ /* --------------------------------------------------------------------------
540
+ Site Header
541
+ -------------------------------------------------------------------------- */
542
+
543
+ .site-header {
544
+ padding: var(--space-4) 0;
545
+ border-bottom: 1px solid var(--color-border);
546
+ }
547
+
548
+ .site-header nav {
549
+ display: flex;
550
+ align-items: center;
551
+ justify-content: space-between;
552
+ }
553
+
554
+ .site-header__logo {
555
+ font-size: var(--text-xl);
556
+ font-weight: 700;
557
+ color: var(--color-text);
558
+ display: inline-flex;
559
+ align-items: center;
560
+ gap: var(--space-1);
561
+ text-decoration: none;
562
+ }
563
+
564
+ .site-header__nav {
565
+ display: flex;
566
+ gap: var(--space-6);
567
+ }
568
+
569
+ .site-header__nav a {
570
+ color: var(--color-text-muted);
571
+ text-decoration: none;
572
+ font-weight: 500;
573
+ transition: color var(--transition-fast);
574
+ }
575
+
576
+ .site-header__nav a:hover {
577
+ color: var(--color-text);
578
+ }
579
+
580
+ /* --------------------------------------------------------------------------
581
+ Site Footer
582
+ -------------------------------------------------------------------------- */
583
+
584
+ .site-footer {
585
+ padding: var(--space-8) 0;
586
+ border-top: 1px solid var(--color-border);
587
+ color: var(--color-text-muted);
588
+ font-size: var(--text-sm);
589
+ }