moduler 0.3.0 → 0.4.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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/builds/moduler/tailwind.css +747 -2
  3. data/app/assets/javascripts/moduler/controllers/wysiwyg_controller.js +126 -0
  4. data/app/assets/javascripts/moduler/vendor/marked.esm.js +77 -0
  5. data/app/components/moduler/form/select_component.html.erb +1 -1
  6. data/app/components/moduler/form/textarea_component.html.erb +14 -0
  7. data/app/components/moduler/form/textarea_component.rb +11 -0
  8. data/app/components/moduler/form/wysiwyg_component.html.erb +30 -0
  9. data/app/components/moduler/form/wysiwyg_component.rb +62 -0
  10. data/app/controllers/moduler/administration/articles_controller.rb +57 -0
  11. data/app/controllers/moduler/articles_controller.rb +15 -0
  12. data/app/models/moduler/article.rb +25 -0
  13. data/app/policies/moduler/administration/article_policy.rb +29 -0
  14. data/app/views/layouts/moduler/articles.html.erb +18 -0
  15. data/app/views/moduler/administration/articles/_article.html.erb +13 -0
  16. data/app/views/moduler/administration/articles/_form.html.erb +18 -0
  17. data/app/views/moduler/administration/articles/edit.html.erb +1 -0
  18. data/app/views/moduler/administration/articles/index.html.erb +13 -0
  19. data/app/views/moduler/administration/articles/new.html.erb +1 -0
  20. data/app/views/moduler/articles/_article.html.erb +16 -0
  21. data/app/views/moduler/articles/index.html.erb +15 -0
  22. data/app/views/moduler/articles/show.html.erb +21 -0
  23. data/app/views/moduler/common/_sidebar.html.erb +3 -2
  24. data/app/views/moduler/common/administration/_sidebar.html.erb +6 -0
  25. data/app/views/moduler/common/profile/_sidebar.html.erb +6 -0
  26. data/app/views/moduler/home/index.html.erb +6 -0
  27. data/app/views/moduler/profile/edit.html.erb +1 -1
  28. data/app/views/moduler/profile/sessions/index.html.erb +1 -1
  29. data/config/importmap.rb +2 -0
  30. data/config/locales/moduler/administration/articles/en.yml +37 -0
  31. data/config/locales/moduler/articles/en.yml +13 -0
  32. data/config/locales/moduler/common/en.yml +11 -4
  33. data/config/locales/moduler/components/en.yml +16 -0
  34. data/config/routes.rb +4 -0
  35. data/db/migrate/20261026203827_create_moduler_articles.rb +15 -0
  36. data/lib/moduler/version.rb +1 -1
  37. data/lib/moduler.rb +3 -0
  38. metadata +53 -2
@@ -17,9 +17,7 @@
17
17
  --color-amber-200: oklch(92.4% 0.12 95.746);
18
18
  --color-amber-700: oklch(55.5% 0.163 48.998);
19
19
  --color-yellow-100: oklch(97.3% 0.071 103.193);
20
- --color-green-50: oklch(98.2% 0.018 155.826);
21
20
  --color-green-100: oklch(96.2% 0.044 156.743);
22
- --color-green-200: oklch(92.5% 0.084 155.995);
23
21
  --color-green-600: oklch(62.7% 0.194 149.214);
24
22
  --color-emerald-50: oklch(97.9% 0.021 166.113);
25
23
  --color-emerald-200: oklch(90.5% 0.093 164.15);
@@ -32,6 +30,7 @@
32
30
  --color-slate-400: oklch(70.4% 0.04 256.788);
33
31
  --color-slate-500: oklch(55.4% 0.046 257.417);
34
32
  --color-slate-600: oklch(44.6% 0.043 257.281);
33
+ --color-slate-700: oklch(37.2% 0.044 257.287);
35
34
  --color-slate-900: oklch(20.8% 0.042 265.755);
36
35
  --color-gray-200: oklch(92.8% 0.006 264.531);
37
36
  --color-gray-300: oklch(87.2% 0.01 258.338);
@@ -42,12 +41,16 @@
42
41
  --spacing: 0.25rem;
43
42
  --container-sm: 24rem;
44
43
  --container-lg: 32rem;
44
+ --container-3xl: 48rem;
45
+ --container-5xl: 64rem;
45
46
  --text-xs: 0.75rem;
46
47
  --text-xs--line-height: calc(1 / 0.75);
47
48
  --text-sm: 0.875rem;
48
49
  --text-sm--line-height: calc(1.25 / 0.875);
49
50
  --text-base: 1rem;
50
51
  --text-base--line-height: calc(1.5 / 1);
52
+ --text-xl: 1.25rem;
53
+ --text-xl--line-height: calc(1.75 / 1.25);
51
54
  --text-2xl: 1.5rem;
52
55
  --text-2xl--line-height: calc(2 / 1.5);
53
56
  --font-weight-medium: 500;
@@ -213,12 +216,21 @@
213
216
  }
214
217
  }
215
218
  @layer utilities {
219
+ .absolute {
220
+ position: absolute;
221
+ }
216
222
  .fixed {
217
223
  position: fixed;
218
224
  }
225
+ .relative {
226
+ position: relative;
227
+ }
219
228
  .static {
220
229
  position: static;
221
230
  }
231
+ .inset-0 {
232
+ inset: calc(var(--spacing) * 0);
233
+ }
222
234
  .start {
223
235
  inset-inline-start: var(--spacing);
224
236
  }
@@ -246,12 +258,629 @@
246
258
  .my-2 {
247
259
  margin-block: calc(var(--spacing) * 2);
248
260
  }
261
+ .prose {
262
+ color: var(--tw-prose-body);
263
+ max-width: 65ch;
264
+ :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
265
+ margin-top: 1.25em;
266
+ margin-bottom: 1.25em;
267
+ }
268
+ :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
269
+ color: var(--tw-prose-lead);
270
+ font-size: 1.25em;
271
+ line-height: 1.6;
272
+ margin-top: 1.2em;
273
+ margin-bottom: 1.2em;
274
+ }
275
+ :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
276
+ color: var(--tw-prose-links);
277
+ text-decoration: underline;
278
+ font-weight: 500;
279
+ }
280
+ :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
281
+ color: var(--tw-prose-bold);
282
+ font-weight: 600;
283
+ }
284
+ :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
285
+ color: inherit;
286
+ }
287
+ :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
288
+ color: inherit;
289
+ }
290
+ :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
291
+ color: inherit;
292
+ }
293
+ :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
294
+ list-style-type: decimal;
295
+ margin-top: 1.25em;
296
+ margin-bottom: 1.25em;
297
+ padding-inline-start: 1.625em;
298
+ }
299
+ :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
300
+ list-style-type: upper-alpha;
301
+ }
302
+ :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
303
+ list-style-type: lower-alpha;
304
+ }
305
+ :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
306
+ list-style-type: upper-alpha;
307
+ }
308
+ :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
309
+ list-style-type: lower-alpha;
310
+ }
311
+ :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
312
+ list-style-type: upper-roman;
313
+ }
314
+ :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
315
+ list-style-type: lower-roman;
316
+ }
317
+ :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
318
+ list-style-type: upper-roman;
319
+ }
320
+ :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
321
+ list-style-type: lower-roman;
322
+ }
323
+ :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
324
+ list-style-type: decimal;
325
+ }
326
+ :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
327
+ list-style-type: disc;
328
+ margin-top: 1.25em;
329
+ margin-bottom: 1.25em;
330
+ padding-inline-start: 1.625em;
331
+ }
332
+ :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
333
+ font-weight: 400;
334
+ color: var(--tw-prose-counters);
335
+ }
336
+ :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
337
+ color: var(--tw-prose-bullets);
338
+ }
339
+ :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
340
+ color: var(--tw-prose-headings);
341
+ font-weight: 600;
342
+ margin-top: 1.25em;
343
+ }
344
+ :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
345
+ border-color: var(--tw-prose-hr);
346
+ border-top-width: 1px;
347
+ margin-top: 3em;
348
+ margin-bottom: 3em;
349
+ }
350
+ :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
351
+ font-weight: 500;
352
+ font-style: italic;
353
+ color: var(--tw-prose-quotes);
354
+ border-inline-start-width: 0.25rem;
355
+ border-inline-start-color: var(--tw-prose-quote-borders);
356
+ quotes: "\201C""\201D""\2018""\2019";
357
+ margin-top: 1.6em;
358
+ margin-bottom: 1.6em;
359
+ padding-inline-start: 1em;
360
+ }
361
+ :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
362
+ content: open-quote;
363
+ }
364
+ :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
365
+ content: close-quote;
366
+ }
367
+ :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
368
+ color: var(--tw-prose-headings);
369
+ font-weight: 800;
370
+ font-size: 2.25em;
371
+ margin-top: 0;
372
+ margin-bottom: 0.8888889em;
373
+ line-height: 1.1111111;
374
+ }
375
+ :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
376
+ font-weight: 900;
377
+ color: inherit;
378
+ }
379
+ :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
380
+ color: var(--tw-prose-headings);
381
+ font-weight: 700;
382
+ font-size: 1.5em;
383
+ margin-top: 2em;
384
+ margin-bottom: 1em;
385
+ line-height: 1.3333333;
386
+ }
387
+ :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
388
+ font-weight: 800;
389
+ color: inherit;
390
+ }
391
+ :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
392
+ color: var(--tw-prose-headings);
393
+ font-weight: 600;
394
+ font-size: 1.25em;
395
+ margin-top: 1.6em;
396
+ margin-bottom: 0.6em;
397
+ line-height: 1.6;
398
+ }
399
+ :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
400
+ font-weight: 700;
401
+ color: inherit;
402
+ }
403
+ :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
404
+ color: var(--tw-prose-headings);
405
+ font-weight: 600;
406
+ margin-top: 1.5em;
407
+ margin-bottom: 0.5em;
408
+ line-height: 1.5;
409
+ }
410
+ :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
411
+ font-weight: 700;
412
+ color: inherit;
413
+ }
414
+ :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
415
+ margin-top: 2em;
416
+ margin-bottom: 2em;
417
+ }
418
+ :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
419
+ display: block;
420
+ margin-top: 2em;
421
+ margin-bottom: 2em;
422
+ }
423
+ :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
424
+ margin-top: 2em;
425
+ margin-bottom: 2em;
426
+ }
427
+ :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
428
+ font-weight: 500;
429
+ font-family: inherit;
430
+ color: var(--tw-prose-kbd);
431
+ box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);
432
+ font-size: 0.875em;
433
+ border-radius: 0.3125rem;
434
+ padding-top: 0.1875em;
435
+ padding-inline-end: 0.375em;
436
+ padding-bottom: 0.1875em;
437
+ padding-inline-start: 0.375em;
438
+ }
439
+ :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
440
+ color: var(--tw-prose-code);
441
+ font-weight: 600;
442
+ font-size: 0.875em;
443
+ }
444
+ :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
445
+ content: "`";
446
+ }
447
+ :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
448
+ content: "`";
449
+ }
450
+ :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
451
+ color: inherit;
452
+ }
453
+ :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
454
+ color: inherit;
455
+ }
456
+ :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
457
+ color: inherit;
458
+ font-size: 0.875em;
459
+ }
460
+ :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
461
+ color: inherit;
462
+ font-size: 0.9em;
463
+ }
464
+ :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
465
+ color: inherit;
466
+ }
467
+ :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
468
+ color: inherit;
469
+ }
470
+ :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
471
+ color: inherit;
472
+ }
473
+ :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
474
+ color: var(--tw-prose-pre-code);
475
+ background-color: var(--tw-prose-pre-bg);
476
+ overflow-x: auto;
477
+ font-weight: 400;
478
+ font-size: 0.875em;
479
+ line-height: 1.7142857;
480
+ margin-top: 1.7142857em;
481
+ margin-bottom: 1.7142857em;
482
+ border-radius: 0.375rem;
483
+ padding-top: 0.8571429em;
484
+ padding-inline-end: 1.1428571em;
485
+ padding-bottom: 0.8571429em;
486
+ padding-inline-start: 1.1428571em;
487
+ }
488
+ :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
489
+ background-color: transparent;
490
+ border-width: 0;
491
+ border-radius: 0;
492
+ padding: 0;
493
+ font-weight: inherit;
494
+ color: inherit;
495
+ font-size: inherit;
496
+ font-family: inherit;
497
+ line-height: inherit;
498
+ }
499
+ :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
500
+ content: none;
501
+ }
502
+ :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
503
+ content: none;
504
+ }
505
+ :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
506
+ width: 100%;
507
+ table-layout: auto;
508
+ margin-top: 2em;
509
+ margin-bottom: 2em;
510
+ font-size: 0.875em;
511
+ line-height: 1.7142857;
512
+ }
513
+ :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
514
+ border-bottom-width: 1px;
515
+ border-bottom-color: var(--tw-prose-th-borders);
516
+ }
517
+ :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
518
+ color: var(--tw-prose-headings);
519
+ font-weight: 600;
520
+ vertical-align: bottom;
521
+ padding-inline-end: 0.5714286em;
522
+ padding-bottom: 0.5714286em;
523
+ padding-inline-start: 0.5714286em;
524
+ }
525
+ :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
526
+ border-bottom-width: 1px;
527
+ border-bottom-color: var(--tw-prose-td-borders);
528
+ }
529
+ :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
530
+ border-bottom-width: 0;
531
+ }
532
+ :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
533
+ vertical-align: baseline;
534
+ }
535
+ :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
536
+ border-top-width: 1px;
537
+ border-top-color: var(--tw-prose-th-borders);
538
+ }
539
+ :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
540
+ vertical-align: top;
541
+ }
542
+ :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
543
+ text-align: start;
544
+ }
545
+ :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
546
+ margin-top: 0;
547
+ margin-bottom: 0;
548
+ }
549
+ :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
550
+ color: var(--tw-prose-captions);
551
+ font-size: 0.875em;
552
+ line-height: 1.4285714;
553
+ margin-top: 0.8571429em;
554
+ }
555
+ --tw-prose-body: oklch(37.3% 0.034 259.733);
556
+ --tw-prose-headings: oklch(21% 0.034 264.665);
557
+ --tw-prose-lead: oklch(44.6% 0.03 256.802);
558
+ --tw-prose-links: oklch(21% 0.034 264.665);
559
+ --tw-prose-bold: oklch(21% 0.034 264.665);
560
+ --tw-prose-counters: oklch(55.1% 0.027 264.364);
561
+ --tw-prose-bullets: oklch(87.2% 0.01 258.338);
562
+ --tw-prose-hr: oklch(92.8% 0.006 264.531);
563
+ --tw-prose-quotes: oklch(21% 0.034 264.665);
564
+ --tw-prose-quote-borders: oklch(92.8% 0.006 264.531);
565
+ --tw-prose-captions: oklch(55.1% 0.027 264.364);
566
+ --tw-prose-kbd: oklch(21% 0.034 264.665);
567
+ --tw-prose-kbd-shadows: color-mix(in oklab, oklch(21% 0.034 264.665) 10%, transparent);
568
+ --tw-prose-code: oklch(21% 0.034 264.665);
569
+ --tw-prose-pre-code: oklch(92.8% 0.006 264.531);
570
+ --tw-prose-pre-bg: oklch(27.8% 0.033 256.848);
571
+ --tw-prose-th-borders: oklch(87.2% 0.01 258.338);
572
+ --tw-prose-td-borders: oklch(92.8% 0.006 264.531);
573
+ --tw-prose-invert-body: oklch(87.2% 0.01 258.338);
574
+ --tw-prose-invert-headings: #fff;
575
+ --tw-prose-invert-lead: oklch(70.7% 0.022 261.325);
576
+ --tw-prose-invert-links: #fff;
577
+ --tw-prose-invert-bold: #fff;
578
+ --tw-prose-invert-counters: oklch(70.7% 0.022 261.325);
579
+ --tw-prose-invert-bullets: oklch(44.6% 0.03 256.802);
580
+ --tw-prose-invert-hr: oklch(37.3% 0.034 259.733);
581
+ --tw-prose-invert-quotes: oklch(96.7% 0.003 264.542);
582
+ --tw-prose-invert-quote-borders: oklch(37.3% 0.034 259.733);
583
+ --tw-prose-invert-captions: oklch(70.7% 0.022 261.325);
584
+ --tw-prose-invert-kbd: #fff;
585
+ --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);
586
+ --tw-prose-invert-code: #fff;
587
+ --tw-prose-invert-pre-code: oklch(87.2% 0.01 258.338);
588
+ --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
589
+ --tw-prose-invert-th-borders: oklch(44.6% 0.03 256.802);
590
+ --tw-prose-invert-td-borders: oklch(37.3% 0.034 259.733);
591
+ font-size: 1rem;
592
+ line-height: 1.75;
593
+ :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
594
+ margin-top: 0;
595
+ margin-bottom: 0;
596
+ }
597
+ :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
598
+ margin-top: 0.5em;
599
+ margin-bottom: 0.5em;
600
+ }
601
+ :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
602
+ padding-inline-start: 0.375em;
603
+ }
604
+ :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
605
+ padding-inline-start: 0.375em;
606
+ }
607
+ :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
608
+ margin-top: 0.75em;
609
+ margin-bottom: 0.75em;
610
+ }
611
+ :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
612
+ margin-top: 1.25em;
613
+ }
614
+ :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
615
+ margin-bottom: 1.25em;
616
+ }
617
+ :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
618
+ margin-top: 1.25em;
619
+ }
620
+ :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
621
+ margin-bottom: 1.25em;
622
+ }
623
+ :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
624
+ margin-top: 0.75em;
625
+ margin-bottom: 0.75em;
626
+ }
627
+ :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
628
+ margin-top: 1.25em;
629
+ margin-bottom: 1.25em;
630
+ }
631
+ :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
632
+ margin-top: 0.5em;
633
+ padding-inline-start: 1.625em;
634
+ }
635
+ :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
636
+ margin-top: 0;
637
+ }
638
+ :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
639
+ margin-top: 0;
640
+ }
641
+ :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
642
+ margin-top: 0;
643
+ }
644
+ :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
645
+ margin-top: 0;
646
+ }
647
+ :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
648
+ padding-inline-start: 0;
649
+ }
650
+ :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
651
+ padding-inline-end: 0;
652
+ }
653
+ :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
654
+ padding-top: 0.5714286em;
655
+ padding-inline-end: 0.5714286em;
656
+ padding-bottom: 0.5714286em;
657
+ padding-inline-start: 0.5714286em;
658
+ }
659
+ :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
660
+ padding-inline-start: 0;
661
+ }
662
+ :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
663
+ padding-inline-end: 0;
664
+ }
665
+ :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
666
+ margin-top: 2em;
667
+ margin-bottom: 2em;
668
+ }
669
+ :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
670
+ margin-top: 0;
671
+ }
672
+ :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
673
+ margin-bottom: 0;
674
+ }
675
+ }
676
+ .prose-sm {
677
+ font-size: 0.875rem;
678
+ line-height: 1.7142857;
679
+ :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
680
+ margin-top: 1.1428571em;
681
+ margin-bottom: 1.1428571em;
682
+ }
683
+ :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
684
+ font-size: 1.2857143em;
685
+ line-height: 1.5555556;
686
+ margin-top: 0.8888889em;
687
+ margin-bottom: 0.8888889em;
688
+ }
689
+ :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
690
+ margin-top: 1.3333333em;
691
+ margin-bottom: 1.3333333em;
692
+ padding-inline-start: 1.1111111em;
693
+ }
694
+ :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
695
+ font-size: 2.1428571em;
696
+ margin-top: 0;
697
+ margin-bottom: 0.8em;
698
+ line-height: 1.2;
699
+ }
700
+ :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
701
+ font-size: 1.4285714em;
702
+ margin-top: 1.6em;
703
+ margin-bottom: 0.8em;
704
+ line-height: 1.4;
705
+ }
706
+ :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
707
+ font-size: 1.2857143em;
708
+ margin-top: 1.5555556em;
709
+ margin-bottom: 0.4444444em;
710
+ line-height: 1.5555556;
711
+ }
712
+ :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
713
+ margin-top: 1.4285714em;
714
+ margin-bottom: 0.5714286em;
715
+ line-height: 1.4285714;
716
+ }
717
+ :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
718
+ margin-top: 1.7142857em;
719
+ margin-bottom: 1.7142857em;
720
+ }
721
+ :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
722
+ margin-top: 1.7142857em;
723
+ margin-bottom: 1.7142857em;
724
+ }
725
+ :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
726
+ margin-top: 0;
727
+ margin-bottom: 0;
728
+ }
729
+ :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
730
+ margin-top: 1.7142857em;
731
+ margin-bottom: 1.7142857em;
732
+ }
733
+ :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
734
+ font-size: 0.8571429em;
735
+ border-radius: 0.3125rem;
736
+ padding-top: 0.1428571em;
737
+ padding-inline-end: 0.3571429em;
738
+ padding-bottom: 0.1428571em;
739
+ padding-inline-start: 0.3571429em;
740
+ }
741
+ :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
742
+ font-size: 0.8571429em;
743
+ }
744
+ :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
745
+ font-size: 0.9em;
746
+ }
747
+ :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
748
+ font-size: 0.8888889em;
749
+ }
750
+ :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
751
+ font-size: 0.8571429em;
752
+ line-height: 1.6666667;
753
+ margin-top: 1.6666667em;
754
+ margin-bottom: 1.6666667em;
755
+ border-radius: 0.25rem;
756
+ padding-top: 0.6666667em;
757
+ padding-inline-end: 1em;
758
+ padding-bottom: 0.6666667em;
759
+ padding-inline-start: 1em;
760
+ }
761
+ :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
762
+ margin-top: 1.1428571em;
763
+ margin-bottom: 1.1428571em;
764
+ padding-inline-start: 1.5714286em;
765
+ }
766
+ :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
767
+ margin-top: 1.1428571em;
768
+ margin-bottom: 1.1428571em;
769
+ padding-inline-start: 1.5714286em;
770
+ }
771
+ :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
772
+ margin-top: 0.2857143em;
773
+ margin-bottom: 0.2857143em;
774
+ }
775
+ :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
776
+ padding-inline-start: 0.4285714em;
777
+ }
778
+ :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
779
+ padding-inline-start: 0.4285714em;
780
+ }
781
+ :where(.prose-sm > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
782
+ margin-top: 0.5714286em;
783
+ margin-bottom: 0.5714286em;
784
+ }
785
+ :where(.prose-sm > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
786
+ margin-top: 1.1428571em;
787
+ }
788
+ :where(.prose-sm > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
789
+ margin-bottom: 1.1428571em;
790
+ }
791
+ :where(.prose-sm > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
792
+ margin-top: 1.1428571em;
793
+ }
794
+ :where(.prose-sm > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
795
+ margin-bottom: 1.1428571em;
796
+ }
797
+ :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
798
+ margin-top: 0.5714286em;
799
+ margin-bottom: 0.5714286em;
800
+ }
801
+ :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
802
+ margin-top: 1.1428571em;
803
+ margin-bottom: 1.1428571em;
804
+ }
805
+ :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
806
+ margin-top: 1.1428571em;
807
+ }
808
+ :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
809
+ margin-top: 0.2857143em;
810
+ padding-inline-start: 1.5714286em;
811
+ }
812
+ :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
813
+ margin-top: 2.8571429em;
814
+ margin-bottom: 2.8571429em;
815
+ }
816
+ :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
817
+ margin-top: 0;
818
+ }
819
+ :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
820
+ margin-top: 0;
821
+ }
822
+ :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
823
+ margin-top: 0;
824
+ }
825
+ :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
826
+ margin-top: 0;
827
+ }
828
+ :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
829
+ font-size: 0.8571429em;
830
+ line-height: 1.5;
831
+ }
832
+ :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
833
+ padding-inline-end: 1em;
834
+ padding-bottom: 0.6666667em;
835
+ padding-inline-start: 1em;
836
+ }
837
+ :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
838
+ padding-inline-start: 0;
839
+ }
840
+ :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
841
+ padding-inline-end: 0;
842
+ }
843
+ :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
844
+ padding-top: 0.6666667em;
845
+ padding-inline-end: 1em;
846
+ padding-bottom: 0.6666667em;
847
+ padding-inline-start: 1em;
848
+ }
849
+ :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
850
+ padding-inline-start: 0;
851
+ }
852
+ :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
853
+ padding-inline-end: 0;
854
+ }
855
+ :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
856
+ margin-top: 1.7142857em;
857
+ margin-bottom: 1.7142857em;
858
+ }
859
+ :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
860
+ margin-top: 0;
861
+ margin-bottom: 0;
862
+ }
863
+ :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
864
+ font-size: 0.8571429em;
865
+ line-height: 1.3333333;
866
+ margin-top: 0.6666667em;
867
+ }
868
+ :where(.prose-sm > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
869
+ margin-top: 0;
870
+ }
871
+ :where(.prose-sm > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
872
+ margin-bottom: 0;
873
+ }
874
+ }
249
875
  .mt-1 {
250
876
  margin-top: calc(var(--spacing) * 1);
251
877
  }
252
878
  .mt-2 {
253
879
  margin-top: calc(var(--spacing) * 2);
254
880
  }
881
+ .mt-3 {
882
+ margin-top: calc(var(--spacing) * 3);
883
+ }
255
884
  .mt-4 {
256
885
  margin-top: calc(var(--spacing) * 4);
257
886
  }
@@ -264,24 +893,36 @@
264
893
  .mt-10 {
265
894
  margin-top: calc(var(--spacing) * 10);
266
895
  }
896
+ .mt-12 {
897
+ margin-top: calc(var(--spacing) * 12);
898
+ }
267
899
  .mb-4 {
268
900
  margin-bottom: calc(var(--spacing) * 4);
269
901
  }
270
902
  .mb-6 {
271
903
  margin-bottom: calc(var(--spacing) * 6);
272
904
  }
905
+ .mb-8 {
906
+ margin-bottom: calc(var(--spacing) * 8);
907
+ }
273
908
  .block {
274
909
  display: block;
275
910
  }
276
911
  .flex {
277
912
  display: flex;
278
913
  }
914
+ .hidden {
915
+ display: none;
916
+ }
279
917
  .inline {
280
918
  display: inline;
281
919
  }
282
920
  .inline-flex {
283
921
  display: inline-flex;
284
922
  }
923
+ .table {
924
+ display: table;
925
+ }
285
926
  .size-5 {
286
927
  width: calc(var(--spacing) * 5);
287
928
  height: calc(var(--spacing) * 5);
@@ -314,6 +955,9 @@
314
955
  .w-full {
315
956
  width: 100%;
316
957
  }
958
+ .max-w-3xl {
959
+ max-width: var(--container-3xl);
960
+ }
317
961
  .max-w-\[120rem\] {
318
962
  max-width: 120rem;
319
963
  }
@@ -392,6 +1036,13 @@
392
1036
  margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
393
1037
  }
394
1038
  }
1039
+ .space-y-12 {
1040
+ :where(& > :not(:last-child)) {
1041
+ --tw-space-y-reverse: 0;
1042
+ margin-block-start: calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse));
1043
+ margin-block-end: calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)));
1044
+ }
1045
+ }
395
1046
  .divide-y {
396
1047
  :where(& > :not(:last-child)) {
397
1048
  --tw-divide-y-reverse: 0;
@@ -426,6 +1077,14 @@
426
1077
  .rounded-md {
427
1078
  border-radius: var(--radius-md);
428
1079
  }
1080
+ .rounded-t-md {
1081
+ border-top-left-radius: var(--radius-md);
1082
+ border-top-right-radius: var(--radius-md);
1083
+ }
1084
+ .rounded-b-md {
1085
+ border-bottom-right-radius: var(--radius-md);
1086
+ border-bottom-left-radius: var(--radius-md);
1087
+ }
429
1088
  .border {
430
1089
  border-style: var(--tw-border-style);
431
1090
  border-width: 1px;
@@ -434,10 +1093,18 @@
434
1093
  border-top-style: var(--tw-border-style);
435
1094
  border-top-width: 1px;
436
1095
  }
1096
+ .border-t-0 {
1097
+ border-top-style: var(--tw-border-style);
1098
+ border-top-width: 0px;
1099
+ }
437
1100
  .border-b {
438
1101
  border-bottom-style: var(--tw-border-style);
439
1102
  border-bottom-width: 1px;
440
1103
  }
1104
+ .border-b-0 {
1105
+ border-bottom-style: var(--tw-border-style);
1106
+ border-bottom-width: 0px;
1107
+ }
441
1108
  .border-dashed {
442
1109
  --tw-border-style: dashed;
443
1110
  border-style: dashed;
@@ -553,9 +1220,15 @@
553
1220
  .pb-4 {
554
1221
  padding-bottom: calc(var(--spacing) * 4);
555
1222
  }
1223
+ .pb-6 {
1224
+ padding-bottom: calc(var(--spacing) * 6);
1225
+ }
556
1226
  .text-center {
557
1227
  text-align: center;
558
1228
  }
1229
+ .font-mono {
1230
+ font-family: var(--font-mono);
1231
+ }
559
1232
  .text-2xl\/9 {
560
1233
  font-size: var(--text-2xl);
561
1234
  line-height: calc(var(--spacing) * 9);
@@ -572,6 +1245,10 @@
572
1245
  font-size: var(--text-sm);
573
1246
  line-height: calc(var(--spacing) * 6);
574
1247
  }
1248
+ .text-xl {
1249
+ font-size: var(--text-xl);
1250
+ line-height: var(--tw-leading, var(--text-xl--line-height));
1251
+ }
575
1252
  .text-xs {
576
1253
  font-size: var(--text-xs);
577
1254
  line-height: var(--tw-leading, var(--text-xs--line-height));
@@ -638,6 +1315,9 @@
638
1315
  .text-slate-600 {
639
1316
  color: var(--color-slate-600);
640
1317
  }
1318
+ .text-slate-700 {
1319
+ color: var(--color-slate-700);
1320
+ }
641
1321
  .text-slate-900 {
642
1322
  color: var(--color-slate-900);
643
1323
  }
@@ -650,6 +1330,9 @@
650
1330
  .uppercase {
651
1331
  text-transform: uppercase;
652
1332
  }
1333
+ .italic {
1334
+ font-style: italic;
1335
+ }
653
1336
  .opacity-0 {
654
1337
  opacity: 0%;
655
1338
  }
@@ -709,9 +1392,54 @@
709
1392
  --tw-duration: 200ms;
710
1393
  transition-duration: 200ms;
711
1394
  }
1395
+ .prose-slate {
1396
+ --tw-prose-body: oklch(37.2% 0.044 257.287);
1397
+ --tw-prose-headings: oklch(20.8% 0.042 265.755);
1398
+ --tw-prose-lead: oklch(44.6% 0.043 257.281);
1399
+ --tw-prose-links: oklch(20.8% 0.042 265.755);
1400
+ --tw-prose-bold: oklch(20.8% 0.042 265.755);
1401
+ --tw-prose-counters: oklch(55.4% 0.046 257.417);
1402
+ --tw-prose-bullets: oklch(86.9% 0.022 252.894);
1403
+ --tw-prose-hr: oklch(92.9% 0.013 255.508);
1404
+ --tw-prose-quotes: oklch(20.8% 0.042 265.755);
1405
+ --tw-prose-quote-borders: oklch(92.9% 0.013 255.508);
1406
+ --tw-prose-captions: oklch(55.4% 0.046 257.417);
1407
+ --tw-prose-kbd: oklch(20.8% 0.042 265.755);
1408
+ --tw-prose-kbd-shadows: color-mix(in oklab, oklch(20.8% 0.042 265.755) 10%, transparent);
1409
+ --tw-prose-code: oklch(20.8% 0.042 265.755);
1410
+ --tw-prose-pre-code: oklch(92.9% 0.013 255.508);
1411
+ --tw-prose-pre-bg: oklch(27.9% 0.041 260.031);
1412
+ --tw-prose-th-borders: oklch(86.9% 0.022 252.894);
1413
+ --tw-prose-td-borders: oklch(92.9% 0.013 255.508);
1414
+ --tw-prose-invert-body: oklch(86.9% 0.022 252.894);
1415
+ --tw-prose-invert-headings: #fff;
1416
+ --tw-prose-invert-lead: oklch(70.4% 0.04 256.788);
1417
+ --tw-prose-invert-links: #fff;
1418
+ --tw-prose-invert-bold: #fff;
1419
+ --tw-prose-invert-counters: oklch(70.4% 0.04 256.788);
1420
+ --tw-prose-invert-bullets: oklch(44.6% 0.043 257.281);
1421
+ --tw-prose-invert-hr: oklch(37.2% 0.044 257.287);
1422
+ --tw-prose-invert-quotes: oklch(96.8% 0.007 247.896);
1423
+ --tw-prose-invert-quote-borders: oklch(37.2% 0.044 257.287);
1424
+ --tw-prose-invert-captions: oklch(70.4% 0.04 256.788);
1425
+ --tw-prose-invert-kbd: #fff;
1426
+ --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);
1427
+ --tw-prose-invert-code: #fff;
1428
+ --tw-prose-invert-pre-code: oklch(86.9% 0.022 252.894);
1429
+ --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
1430
+ --tw-prose-invert-th-borders: oklch(44.6% 0.043 257.281);
1431
+ --tw-prose-invert-td-borders: oklch(37.2% 0.044 257.287);
1432
+ }
712
1433
  .ring-inset {
713
1434
  --tw-ring-inset: inset;
714
1435
  }
1436
+ .group-hover\:text-custom {
1437
+ &:is(:where(.group):hover *) {
1438
+ @media (hover: hover) {
1439
+ color: var(--color-custom);
1440
+ }
1441
+ }
1442
+ }
715
1443
  .placeholder\:text-gray-400 {
716
1444
  &::placeholder {
717
1445
  color: var(--color-gray-400);
@@ -750,6 +1478,13 @@
750
1478
  }
751
1479
  }
752
1480
  }
1481
+ .hover\:bg-slate-200 {
1482
+ &:hover {
1483
+ @media (hover: hover) {
1484
+ background-color: var(--color-slate-200);
1485
+ }
1486
+ }
1487
+ }
753
1488
  .hover\:text-custom {
754
1489
  &:hover {
755
1490
  @media (hover: hover) {
@@ -996,6 +1731,16 @@
996
1731
  padding-inline: calc(var(--spacing) * 24);
997
1732
  }
998
1733
  }
1734
+ .prose-img\:w-full {
1735
+ & :is(:where(img):not(:where([class~="not-prose"],[class~="not-prose"] *))) {
1736
+ width: 100%;
1737
+ }
1738
+ }
1739
+ .prose-img\:max-w-5xl {
1740
+ & :is(:where(img):not(:where([class~="not-prose"],[class~="not-prose"] *))) {
1741
+ max-width: var(--container-5xl);
1742
+ }
1743
+ }
999
1744
  }
1000
1745
  .prose-100 {
1001
1746
  max-width: 100%;