@deepgram/styles 0.0.9 → 0.1.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.
@@ -0,0 +1,2591 @@
1
+ # yaml-language-server: $schema=https://design.dx.deepgram.com/.well-known/design-system-schema-v1.json
2
+
3
+ version: "1.0"
4
+
5
+ # =============================================================================
6
+ # DESIGN TOKENS
7
+ # =============================================================================
8
+ tokens:
9
+ variables:
10
+ "--dg-base-font-size": "16px"
11
+ "--dg-border-width": "0.125rem"
12
+ "--dg-primary": "#13ef95"
13
+ "--dg-secondary": "#149afb"
14
+
15
+ colors:
16
+ brand:
17
+ primary:
18
+ value: "var(--dg-primary, #13ef95)"
19
+ variable: "--dg-primary"
20
+ fallback: "#13ef95"
21
+ secondary:
22
+ value: "var(--dg-secondary, #149afb)"
23
+ variable: "--dg-secondary"
24
+ fallback: "#149afb"
25
+
26
+ background:
27
+ almost-black: "#050506"
28
+ default: "#0b0b0c"
29
+ charcoal: "#1a1a1f"
30
+ translucent: "rgba(0, 0, 0, 0.5)"
31
+
32
+ border:
33
+ default: "#2c2c33"
34
+ pebble: "#4e4e52"
35
+ slate: "#949498"
36
+
37
+ text:
38
+ default: "#fbfbff"
39
+ fog: "#edede2"
40
+ platinum: "#e1e1e5"
41
+ muted: "#949498"
42
+
43
+ status:
44
+ success: "#12b76a"
45
+ warning: "#fec84b"
46
+ danger: "#f04438"
47
+
48
+ gradient:
49
+ start: "#008fc1"
50
+ end: "#00f099"
51
+
52
+ fonts:
53
+ sans:
54
+ family: ["Inter", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto", "Helvetica", "Arial", "sans-serif"]
55
+ tailwind-key: "dg-sans"
56
+ noto:
57
+ family: ["Noto Sans", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto", "Helvetica", "Arial", "sans-serif"]
58
+ tailwind-key: "dg-noto"
59
+ mono:
60
+ family: ["Fira Code", "Monaco", "Consolas", "Courier New", "monospace"]
61
+ tailwind-key: "dg-mono"
62
+
63
+ spacing:
64
+ xs: "0.25rem"
65
+ sm: "0.5rem"
66
+ md: "1rem"
67
+ lg: "1.5rem"
68
+ xl: "2rem"
69
+ 2xl: "3rem"
70
+ "128": "32rem"
71
+
72
+ border-radius:
73
+ sm: "0.25rem"
74
+ md: "0.5rem"
75
+ lg: "0.75rem"
76
+ xl: "1rem"
77
+
78
+ shadows:
79
+ sm: "0 0.0625rem 0.125rem 0 rgba(0, 0, 0, 0.05)"
80
+ md: "0 0.25rem 0.375rem -0.0625rem rgba(0, 0, 0, 0.1), 0 0.125rem 0.25rem -0.0625rem rgba(0, 0, 0, 0.06)"
81
+ lg: "0 0.625rem 0.9375rem -0.1875rem rgba(0, 0, 0, 0.1), 0 0.25rem 0.375rem -0.125rem rgba(0, 0, 0, 0.05)"
82
+
83
+ logos:
84
+ primary:
85
+ path: "assets/deepgram-dark.svg"
86
+ alt: "Deepgram"
87
+
88
+ # =============================================================================
89
+ # BASE STYLES (applied via Tailwind plugin addBase)
90
+ # =============================================================================
91
+ base:
92
+ html:
93
+ properties:
94
+ fontSize: "var(--dg-base-font-size, 16px)"
95
+ scrollBehavior: "smooth"
96
+ body:
97
+ properties:
98
+ fontFamily: "theme(fontFamily.dg-sans)"
99
+ WebkitFontSmoothing: "antialiased"
100
+ MozOsxFontSmoothing: "grayscale"
101
+ backgroundColor: "theme(colors.dg-background)"
102
+ color: "theme(colors.dg-text)"
103
+ lineHeight: "theme(lineHeight.normal)"
104
+ "h1, h2, h3, h4, h5, h6":
105
+ properties:
106
+ fontFamily: "theme(fontFamily.dg-noto)"
107
+ fontWeight: "theme(fontWeight.bold)"
108
+ h1:
109
+ properties:
110
+ fontSize: "theme(fontSize.4xl)"
111
+ media:
112
+ "(min-width: 768px)":
113
+ properties:
114
+ fontSize: "theme(fontSize.5xl)"
115
+ h2:
116
+ properties:
117
+ fontSize: "theme(fontSize.3xl)"
118
+ media:
119
+ "(min-width: 768px)":
120
+ properties:
121
+ fontSize: "theme(fontSize.4xl)"
122
+ h3:
123
+ properties:
124
+ fontSize: "theme(fontSize.2xl)"
125
+ media:
126
+ "(min-width: 768px)":
127
+ properties:
128
+ fontSize: "theme(fontSize.3xl)"
129
+ h4:
130
+ properties:
131
+ fontSize: "theme(fontSize.xl)"
132
+ media:
133
+ "(min-width: 768px)":
134
+ properties:
135
+ fontSize: "theme(fontSize.2xl)"
136
+ "code, pre":
137
+ properties:
138
+ fontFamily: "theme(fontFamily.dg-mono)"
139
+ a:
140
+ properties:
141
+ color: "theme(colors.dg-primary)"
142
+ transitionProperty: "color"
143
+ transitionDuration: "200ms"
144
+ "&:hover":
145
+ opacity: "0.8"
146
+
147
+ # =============================================================================
148
+ # CUSTOM UTILITIES (applied via Tailwind plugin addUtilities)
149
+ # =============================================================================
150
+ utilities:
151
+ ".dg-gradient-border":
152
+ properties:
153
+ backgroundImage: "linear-gradient(rgb(0, 0, 0), rgb(0, 0, 0)), linear-gradient(90deg, color-mix(in srgb, var(--dg-secondary, #149afb) 70%, #000), color-mix(in srgb, var(--dg-primary, #13ef95) 70%, #000), color-mix(in srgb, var(--dg-secondary, #149afb) 70%, #000), color-mix(in srgb, var(--dg-primary, #13ef95) 70%, #000))"
154
+ backgroundOrigin: "padding-box, border-box"
155
+ backgroundClip: "padding-box, border-box"
156
+ backgroundRepeat: "no-repeat"
157
+ backgroundPosition: "center"
158
+ backgroundSize: "100% 100%"
159
+ backgroundColor: "rgb(0, 0, 0)"
160
+ ".dg-bg-reset":
161
+ properties:
162
+ backgroundImage: "none"
163
+ backgroundOrigin: "padding-box"
164
+ backgroundClip: "border-box"
165
+ backgroundRepeat: "repeat"
166
+ backgroundPosition: "0% 0%"
167
+ backgroundSize: "auto"
168
+ ".dg-glow-cyan-green":
169
+ properties:
170
+ boxShadow: "color-mix(in srgb, var(--dg-primary, #13ef95) 20%, transparent) 0.375rem 0 0.9375rem 0, color-mix(in srgb, var(--dg-secondary, #149afb) 20%, transparent) -0.375rem 0 0.9375rem 0"
171
+ ".dg-shadow-subtle":
172
+ properties:
173
+ boxShadow: "rgba(38, 44, 52, 0.05) 0 0.0625rem 0.125rem"
174
+
175
+ # =============================================================================
176
+ # COMPONENTS
177
+ # =============================================================================
178
+ components:
179
+
180
+ # ---------------------------------------------------------------------------
181
+ # BUTTONS
182
+ # ---------------------------------------------------------------------------
183
+ btn:
184
+ metadata:
185
+ title: "Primary Button"
186
+ description: "Main call-to-action button with primary brand color"
187
+ category: "application-ui"
188
+ section: "Elements"
189
+ subsection: "Buttons"
190
+ tags: [button, primary, cta, action]
191
+ css:
192
+ ".dg-btn":
193
+ apply: "inline-flex items-center justify-center px-5 py-1.5 leading-[2] font-dg-sans font-semibold text-base rounded capitalize whitespace-nowrap cursor-pointer select-none outline-none w-fit disabled:opacity-50 disabled:cursor-not-allowed"
194
+ properties:
195
+ gap: "0.5rem"
196
+ height: "3rem"
197
+ variants:
198
+ sm:
199
+ css:
200
+ ".dg-btn--sm":
201
+ apply: "px-5 py-2 font-bold text-sm"
202
+ properties:
203
+ height: "2.25rem"
204
+ primary:
205
+ css:
206
+ ".dg-btn--primary":
207
+ apply: "border border-transparent relative dg-text-white dg-gradient-border dg-glow-cyan-green"
208
+ ".dg-btn--primary:hover":
209
+ apply: "border-transparent text-black dg-bg-reset bg-white dg-shadow-subtle"
210
+ secondary:
211
+ css:
212
+ ".dg-btn--secondary":
213
+ apply: "border border-transparent bg-white text-black"
214
+ ".dg-btn--secondary:hover":
215
+ apply: "border border-white bg-black dg-text-white"
216
+ ghost:
217
+ css:
218
+ ".dg-btn--ghost":
219
+ apply: "border border-dg-slate bg-transparent dg-text-white"
220
+ ".dg-btn--ghost:hover":
221
+ apply: "border-transparent text-black dg-bg-reset bg-white dg-shadow-subtle"
222
+ danger-ghost:
223
+ css:
224
+ ".dg-btn--danger-ghost":
225
+ apply: "border border-dg-danger bg-transparent dg-text-white"
226
+ ".dg-btn--danger-ghost:hover":
227
+ apply: "border-transparent bg-dg-danger dg-text-white"
228
+ icon-only:
229
+ css:
230
+ ".dg-btn--icon-only":
231
+ apply: "px-2 size-12"
232
+ ".dg-btn--icon-only.dg-btn--sm":
233
+ apply: "size-6"
234
+ collapse:
235
+ css:
236
+ ".dg-btn--collapse":
237
+ apply: "inline-flex"
238
+ media:
239
+ "(max-width: 768px)":
240
+ ".dg-btn--collapse":
241
+ apply: "w-full justify-center"
242
+ elements:
243
+ icon:
244
+ css:
245
+ ".dg-btn i, .dg-btn svg":
246
+ properties:
247
+ flex-shrink: "0"
248
+ examples:
249
+ - title: "Primary Button"
250
+ description: "Default primary button element"
251
+ ast:
252
+ tag: button
253
+ props:
254
+ type: button
255
+ class: "dg-btn dg-btn--primary"
256
+ children:
257
+ - "Primary Action"
258
+ - title: "Primary Button as Link"
259
+ description: "Button styles applied to a link - perfect for navigation CTAs"
260
+ ast:
261
+ tag: a
262
+ props:
263
+ href: "#"
264
+ class: "dg-btn dg-btn--primary"
265
+ children:
266
+ - "Get Started"
267
+ - title: "Primary Button with Icon Before"
268
+ description: "Icon placed before text"
269
+ ast:
270
+ tag: button
271
+ props:
272
+ type: button
273
+ class: "dg-btn dg-btn--primary"
274
+ children:
275
+ - tag: i
276
+ props:
277
+ class: "fas fa-play"
278
+ - "Start Recording"
279
+ - title: "Primary Link with Icon After"
280
+ description: "Link styled as button with trailing icon"
281
+ ast:
282
+ tag: a
283
+ props:
284
+ href: "#"
285
+ class: "dg-btn dg-btn--primary"
286
+ children:
287
+ - "Continue"
288
+ - tag: i
289
+ props:
290
+ class: "fas fa-arrow-right"
291
+ - title: "Small Primary Button"
292
+ description: "Compact version for tight spaces"
293
+ ast:
294
+ tag: button
295
+ props:
296
+ type: button
297
+ class: "dg-btn dg-btn--primary dg-btn--sm"
298
+ children:
299
+ - "Primary"
300
+ - title: "Small Primary Link"
301
+ description: "Compact link styled as button"
302
+ ast:
303
+ tag: a
304
+ props:
305
+ href: "#"
306
+ class: "dg-btn dg-btn--primary dg-btn--sm"
307
+ children:
308
+ - "Sign Up"
309
+ - title: "Custom Color Primary Button"
310
+ description: "Primary button with custom brand colors using CSS variables"
311
+ ast:
312
+ tag: div
313
+ props:
314
+ style: "--dg-primary: #a855f7; --dg-secondary: #ec4899;"
315
+ children:
316
+ - tag: button
317
+ props:
318
+ type: button
319
+ class: "dg-btn dg-btn--primary"
320
+ children:
321
+ - tag: i
322
+ props:
323
+ class: "fas fa-sparkles"
324
+ - "Custom Purple Brand"
325
+
326
+ btn-secondary:
327
+ metadata:
328
+ title: "Secondary Button"
329
+ description: "Secondary action button with alternative styling"
330
+ category: "application-ui"
331
+ section: "Elements"
332
+ subsection: "Buttons"
333
+ tags: [button, secondary, action]
334
+ examples:
335
+ - title: "Secondary Button"
336
+ description: "Default secondary button element"
337
+ ast:
338
+ tag: button
339
+ props:
340
+ type: button
341
+ class: "dg-btn dg-btn--secondary"
342
+ children:
343
+ - "Secondary Action"
344
+ - title: "Secondary Button as Link"
345
+ description: "Button styles applied to a link"
346
+ ast:
347
+ tag: a
348
+ props:
349
+ href: "#"
350
+ class: "dg-btn dg-btn--secondary"
351
+ children:
352
+ - "Learn More"
353
+ - title: "Secondary Button with Icon Before"
354
+ description: "Icon placed before text"
355
+ ast:
356
+ tag: button
357
+ props:
358
+ type: button
359
+ class: "dg-btn dg-btn--secondary"
360
+ children:
361
+ - tag: i
362
+ props:
363
+ class: "fas fa-download"
364
+ - "Download"
365
+ - title: "Secondary Link with Icon After"
366
+ description: "Link styled as button with trailing icon"
367
+ ast:
368
+ tag: a
369
+ props:
370
+ href: "#"
371
+ class: "dg-btn dg-btn--secondary"
372
+ children:
373
+ - "View Docs"
374
+ - tag: i
375
+ props:
376
+ class: "fas fa-external-link-alt"
377
+ - title: "Small Secondary Button"
378
+ description: "Compact version for tight spaces"
379
+ ast:
380
+ tag: button
381
+ props:
382
+ type: button
383
+ class: "dg-btn dg-btn--secondary dg-btn--sm"
384
+ children:
385
+ - "Cancel"
386
+ - title: "Small Secondary Link"
387
+ description: "Compact link styled as secondary button"
388
+ ast:
389
+ tag: a
390
+ props:
391
+ href: "#"
392
+ class: "dg-btn dg-btn--secondary dg-btn--sm"
393
+ children:
394
+ - "More Info"
395
+
396
+ btn-ghost:
397
+ metadata:
398
+ title: "Ghost Button"
399
+ description: "Minimal button with transparent background and border"
400
+ category: "application-ui"
401
+ section: "Elements"
402
+ subsection: "Buttons"
403
+ tags: [button, ghost, minimal, tertiary]
404
+ examples:
405
+ - title: "Ghost Button"
406
+ description: "Default ghost button element"
407
+ ast:
408
+ tag: button
409
+ props:
410
+ type: button
411
+ class: "dg-btn dg-btn--ghost"
412
+ children:
413
+ - "Ghost Action"
414
+ - title: "Ghost Button as Link"
415
+ description: "Button styles applied to a link"
416
+ ast:
417
+ tag: a
418
+ props:
419
+ href: "#"
420
+ class: "dg-btn dg-btn--ghost"
421
+ children:
422
+ - "View Details"
423
+ - title: "Ghost Button with Icon Before"
424
+ description: "Icon placed before text"
425
+ ast:
426
+ tag: button
427
+ props:
428
+ type: button
429
+ class: "dg-btn dg-btn--ghost"
430
+ children:
431
+ - tag: i
432
+ props:
433
+ class: "fas fa-cog"
434
+ - "Settings"
435
+ - title: "Ghost Link with Icon After"
436
+ description: "Link styled as button with trailing icon"
437
+ ast:
438
+ tag: a
439
+ props:
440
+ href: "#"
441
+ class: "dg-btn dg-btn--ghost"
442
+ children:
443
+ - "Explore"
444
+ - tag: i
445
+ props:
446
+ class: "fas fa-chevron-right"
447
+ - title: "Small Ghost Button"
448
+ description: "Compact version for tight spaces"
449
+ ast:
450
+ tag: button
451
+ props:
452
+ type: button
453
+ class: "dg-btn dg-btn--ghost dg-btn--sm"
454
+ children:
455
+ - "Close"
456
+ - title: "Small Ghost Link"
457
+ description: "Compact link styled as ghost button"
458
+ ast:
459
+ tag: a
460
+ props:
461
+ href: "#"
462
+ class: "dg-btn dg-btn--ghost dg-btn--sm"
463
+ children:
464
+ - "Skip"
465
+
466
+ btn-danger-ghost:
467
+ metadata:
468
+ title: "Danger Ghost Button"
469
+ description: "Destructive action button with ghost styling"
470
+ category: "application-ui"
471
+ section: "Elements"
472
+ subsection: "Buttons"
473
+ tags: [button, danger, ghost, destructive, delete]
474
+ examples:
475
+ - title: "Danger Ghost Button"
476
+ ast:
477
+ tag: button
478
+ props:
479
+ type: button
480
+ class: "dg-btn dg-btn--danger-ghost"
481
+ children:
482
+ - "Delete"
483
+ - title: "Danger Ghost Button as Link"
484
+ ast:
485
+ tag: a
486
+ props:
487
+ href: "#"
488
+ class: "dg-btn dg-btn--danger-ghost"
489
+ children:
490
+ - "Remove Account"
491
+ - title: "Danger Ghost Button with Icon"
492
+ ast:
493
+ tag: button
494
+ props:
495
+ type: button
496
+ class: "dg-btn dg-btn--danger-ghost"
497
+ children:
498
+ - tag: i
499
+ props:
500
+ class: "fas fa-trash"
501
+ - "Delete Recording"
502
+ - title: "Small Danger Ghost Button"
503
+ ast:
504
+ tag: button
505
+ props:
506
+ type: button
507
+ class: "dg-btn dg-btn--danger-ghost dg-btn--sm"
508
+ children:
509
+ - "Remove"
510
+ - title: "Small Danger Ghost Link"
511
+ ast:
512
+ tag: a
513
+ props:
514
+ href: "#"
515
+ class: "dg-btn dg-btn--danger-ghost dg-btn--sm"
516
+ children:
517
+ - "Discard"
518
+
519
+ btn-icon:
520
+ metadata:
521
+ title: "Icon Button"
522
+ description: "Icon-only button for compact actions"
523
+ category: "application-ui"
524
+ section: "Elements"
525
+ subsection: "Buttons"
526
+ tags: [button, icon, compact]
527
+ examples:
528
+ - title: "Icon Button"
529
+ ast:
530
+ tag: button
531
+ props:
532
+ type: button
533
+ class: "dg-btn dg-btn--primary dg-btn--icon-only"
534
+ children:
535
+ - tag: i
536
+ props:
537
+ class: "fas fa-microphone"
538
+ - title: "Small Icon Button"
539
+ ast:
540
+ tag: button
541
+ props:
542
+ type: button
543
+ class: "dg-btn dg-btn--ghost dg-btn--icon-only dg-btn--sm"
544
+ children:
545
+ - tag: i
546
+ props:
547
+ class: "fas fa-times"
548
+
549
+ btn-small:
550
+ metadata:
551
+ title: "Small Button"
552
+ description: "Compact button for tight spaces"
553
+ category: "application-ui"
554
+ section: "Elements"
555
+ subsection: "Buttons"
556
+ tags: [button, small, compact]
557
+ examples:
558
+ - title: "Small Primary Button"
559
+ description: "Compact primary button for tight spaces"
560
+ ast:
561
+ tag: button
562
+ props:
563
+ type: button
564
+ class: "dg-btn dg-btn--primary dg-btn--sm"
565
+ children:
566
+ - "Save"
567
+ - title: "Small Primary Link"
568
+ description: "Compact link styled as primary button"
569
+ ast:
570
+ tag: a
571
+ props:
572
+ href: "#"
573
+ class: "dg-btn dg-btn--primary dg-btn--sm"
574
+ children:
575
+ - "Edit"
576
+ - title: "Small Secondary Button"
577
+ ast:
578
+ tag: button
579
+ props:
580
+ type: button
581
+ class: "dg-btn dg-btn--secondary dg-btn--sm"
582
+ children:
583
+ - "Cancel"
584
+ - title: "Small Secondary Link"
585
+ ast:
586
+ tag: a
587
+ props:
588
+ href: "#"
589
+ class: "dg-btn dg-btn--secondary dg-btn--sm"
590
+ children:
591
+ - "View"
592
+ - title: "Small Ghost Button"
593
+ ast:
594
+ tag: button
595
+ props:
596
+ type: button
597
+ class: "dg-btn dg-btn--ghost dg-btn--sm"
598
+ children:
599
+ - "Close"
600
+ - title: "Small Ghost Link"
601
+ ast:
602
+ tag: a
603
+ props:
604
+ href: "#"
605
+ class: "dg-btn dg-btn--ghost dg-btn--sm"
606
+ children:
607
+ - "Skip"
608
+
609
+ btn-collapse:
610
+ metadata:
611
+ title: "Collapse Button"
612
+ description: "Responsive button that expands full-width on mobile"
613
+ category: "application-ui"
614
+ section: "Elements"
615
+ subsection: "Buttons"
616
+ tags: [button, responsive, mobile]
617
+ examples:
618
+ - title: "Collapse Primary Button"
619
+ ast:
620
+ tag: button
621
+ props:
622
+ type: button
623
+ class: "dg-btn dg-btn--primary dg-btn--collapse"
624
+ children:
625
+ - "Full Width on Mobile"
626
+ - title: "Collapse Ghost Button"
627
+ ast:
628
+ tag: button
629
+ props:
630
+ type: button
631
+ class: "dg-btn dg-btn--ghost dg-btn--collapse"
632
+ children:
633
+ - "Responsive Ghost"
634
+
635
+ # ---------------------------------------------------------------------------
636
+ # BUTTON GROUPS
637
+ # ---------------------------------------------------------------------------
638
+ action-group:
639
+ metadata:
640
+ title: "Button Group"
641
+ description: "Horizontal group of buttons with consistent spacing"
642
+ category: "application-ui"
643
+ section: "Elements"
644
+ subsection: "Button Groups"
645
+ tags: [button, group, actions]
646
+ css:
647
+ ".dg-action-group":
648
+ apply: "flex flex-wrap justify-center gap-4"
649
+ media:
650
+ "(max-width: 640px)":
651
+ ".dg-action-group":
652
+ apply: "flex-col items-stretch"
653
+ ".dg-action-group .dg-btn":
654
+ apply: "w-full"
655
+ examples:
656
+ - title: "Button Group"
657
+ ast:
658
+ tag: div
659
+ props:
660
+ class: "dg-action-group"
661
+ children:
662
+ - tag: button
663
+ props:
664
+ type: button
665
+ class: "dg-btn dg-btn--primary"
666
+ children:
667
+ - "Primary"
668
+ - tag: button
669
+ props:
670
+ type: button
671
+ class: "dg-btn dg-btn--secondary"
672
+ children:
673
+ - "Secondary"
674
+ - tag: button
675
+ props:
676
+ type: button
677
+ class: "dg-btn dg-btn--ghost"
678
+ children:
679
+ - "Ghost"
680
+ - title: "Multiple Actions"
681
+ ast:
682
+ tag: div
683
+ props:
684
+ class: "dg-action-group"
685
+ children:
686
+ - tag: button
687
+ props:
688
+ type: button
689
+ class: "dg-btn dg-btn--primary"
690
+ children:
691
+ - "Save Changes"
692
+ - tag: button
693
+ props:
694
+ type: button
695
+ class: "dg-btn dg-btn--ghost"
696
+ children:
697
+ - "Cancel"
698
+ - title: "Action Group with Icons"
699
+ ast:
700
+ tag: div
701
+ props:
702
+ class: "dg-action-group"
703
+ children:
704
+ - tag: button
705
+ props:
706
+ type: button
707
+ class: "dg-btn dg-btn--primary"
708
+ children:
709
+ - tag: i
710
+ props:
711
+ class: "fas fa-play"
712
+ - "Start"
713
+ - tag: button
714
+ props:
715
+ type: button
716
+ class: "dg-btn dg-btn--danger-ghost"
717
+ children:
718
+ - tag: i
719
+ props:
720
+ class: "fas fa-stop"
721
+ - "Stop"
722
+
723
+ # ---------------------------------------------------------------------------
724
+ # LAYOUT - SECTIONS
725
+ # ---------------------------------------------------------------------------
726
+ section:
727
+ metadata:
728
+ title: "Section"
729
+ description: "Reusable content section with responsive padding"
730
+ category: "application-ui"
731
+ section: "Layout"
732
+ subsection: "Containers"
733
+ tags: [section, layout, container]
734
+ css:
735
+ ".dg-section":
736
+ apply: "w-full"
737
+ properties:
738
+ padding: "0.75rem"
739
+ margin-bottom: "1rem"
740
+ media:
741
+ "(min-width: 640px)":
742
+ ".dg-section":
743
+ properties:
744
+ padding: "1.25rem 1rem"
745
+ margin-bottom: "1.5rem"
746
+ "(min-width: 1024px)":
747
+ ".dg-section":
748
+ properties:
749
+ padding: "2rem 1.5rem"
750
+ margin-bottom: "2rem"
751
+ variants:
752
+ compact:
753
+ css:
754
+ ".dg-section--compact":
755
+ properties:
756
+ padding: "0.5rem"
757
+ margin-bottom: "0.5rem"
758
+ media:
759
+ "(min-width: 640px)":
760
+ ".dg-section--compact":
761
+ properties:
762
+ padding: "0.75rem"
763
+ margin-bottom: "0.75rem"
764
+ spacious:
765
+ css:
766
+ ".dg-section--spacious":
767
+ properties:
768
+ padding: "1.5rem 0.75rem"
769
+ margin-bottom: "2rem"
770
+ media:
771
+ "(min-width: 640px)":
772
+ ".dg-section--spacious":
773
+ properties:
774
+ padding: "2rem 1.5rem"
775
+ margin-bottom: "2.5rem"
776
+ bordered:
777
+ css:
778
+ ".dg-section--bordered":
779
+ apply: "rounded-lg border border-dg-pebble bg-dg-charcoal"
780
+ elevated:
781
+ css:
782
+ ".dg-section--elevated":
783
+ apply: "rounded-lg border border-dg-pebble bg-dg-charcoal shadow-dg-md"
784
+ fieldset:
785
+ css:
786
+ ".dg-section--fieldset":
787
+ apply: "rounded-lg border border-dg-pebble relative"
788
+ properties:
789
+ padding-top: "2rem"
790
+ ".dg-section--fieldset .dg-section-heading":
791
+ apply: "absolute bg-dg-background dg-text-muted uppercase tracking-wide font-semibold text-base px-2 m-0"
792
+ properties:
793
+ top: "-0.75rem"
794
+ left: "1rem"
795
+ media:
796
+ "(min-width: 640px)":
797
+ ".dg-section--fieldset":
798
+ properties:
799
+ padding-top: "2.5rem"
800
+ ".dg-section--fieldset .dg-section-heading":
801
+ properties:
802
+ font-size: "1.125rem"
803
+ examples:
804
+ - title: "Section"
805
+ ast:
806
+ tag: div
807
+ props:
808
+ class: "dg-section"
809
+ children:
810
+ - tag: p
811
+ children:
812
+ - "Section content"
813
+
814
+ # ---------------------------------------------------------------------------
815
+ # LAYOUT - CARDS
816
+ # ---------------------------------------------------------------------------
817
+ card:
818
+ metadata:
819
+ title: "Card"
820
+ description: "Flexible card container with multiple variants"
821
+ category: "application-ui"
822
+ section: "Layout"
823
+ subsection: "Cards"
824
+ tags: [card, container, layout]
825
+ css:
826
+ ".dg-card":
827
+ apply: "w-full rounded-lg border border-dg-pebble bg-dg-charcoal flex flex-col p-3 mb-3 shadow-dg-sm transition-shadow duration-200"
828
+ ".dg-card:hover":
829
+ apply: "shadow-dg-md"
830
+ media:
831
+ "(min-width: 640px)":
832
+ ".dg-card":
833
+ apply: "p-4 mb-4"
834
+ "(min-width: 1024px)":
835
+ ".dg-card":
836
+ apply: "p-6"
837
+ variants:
838
+ compact:
839
+ css:
840
+ ".dg-card--compact":
841
+ apply: "p-2"
842
+ media:
843
+ "(min-width: 640px)":
844
+ ".dg-card--compact":
845
+ apply: "p-3"
846
+ spacious:
847
+ css:
848
+ ".dg-card--spacious":
849
+ apply: "p-4"
850
+ media:
851
+ "(min-width: 640px)":
852
+ ".dg-card--spacious":
853
+ apply: "p-6"
854
+ "(min-width: 1024px)":
855
+ ".dg-card--spacious":
856
+ apply: "p-8"
857
+ bordered:
858
+ css:
859
+ ".dg-card--bordered":
860
+ apply: "border-2 border-dg-slate"
861
+ structured:
862
+ css:
863
+ ".dg-card--structured":
864
+ apply: "p-0 justify-between"
865
+ selectable:
866
+ css:
867
+ ".dg-card--selectable":
868
+ apply: "cursor-pointer transition-all duration-200 border-2 border-dg-pebble"
869
+ properties:
870
+ padding: "1.25rem"
871
+ ".dg-card--selectable:hover":
872
+ apply: "border-dg-slate"
873
+ ".dg-card--selectable:has(input[type=\"radio\"]:checked)":
874
+ apply: "border-dg-primary"
875
+ properties:
876
+ background: "rgba(19, 239, 149, 0.05)"
877
+ ".dg-sr-only":
878
+ apply: "sr-only"
879
+ ".dg-card--selectable input[type=\"radio\"]":
880
+ apply: "sr-only"
881
+ ".dg-card--selectable__indicator":
882
+ apply: "hidden"
883
+ ".dg-card--selectable__icon":
884
+ apply: "dg-text-white"
885
+ properties:
886
+ margin-right: "0.5rem"
887
+ ".dg-card--selectable__content":
888
+ apply: "flex-1 flex flex-col gap-1"
889
+ ".dg-card--selectable .dg-item-title":
890
+ apply: "text-base font-semibold dg-text-white"
891
+ properties:
892
+ display: "flex"
893
+ align-items: "center"
894
+ ".dg-card--selectable .dg-prose":
895
+ apply: "text-sm dg-text-muted"
896
+ media:
897
+ "(max-width: 767px)":
898
+ ".dg-card--selectable__content":
899
+ apply: "flex-row items-center gap-3"
900
+ ".dg-card--selectable .dg-item-title":
901
+ properties:
902
+ margin-bottom: "0"
903
+ flex-shrink: "0"
904
+ ".dg-card--selectable .dg-prose":
905
+ properties:
906
+ flex: "1"
907
+ white-space: "nowrap"
908
+ overflow: "hidden"
909
+ text-overflow: "ellipsis"
910
+ "(min-width: 768px)":
911
+ ".dg-card--selectable .dg-item-title":
912
+ properties:
913
+ margin-bottom: "0.25rem"
914
+ file-upload:
915
+ css:
916
+ ".dg-card--file-upload":
917
+ apply: "cursor-pointer transition-all duration-200 border-2 border-dashed border-dg-pebble"
918
+ properties:
919
+ padding: "1.25rem"
920
+ ".dg-card--file-upload:hover":
921
+ apply: "border-dg-slate"
922
+ ".dg-card--file-upload:has(input[type=\"checkbox\"]:checked)":
923
+ apply: "border-dg-primary border-solid"
924
+ properties:
925
+ background: "rgba(19, 239, 149, 0.05)"
926
+ ".dg-card--file-upload input[type=\"file\"], .dg-card--file-upload input[type=\"checkbox\"]":
927
+ apply: "sr-only"
928
+ ".dg-card--file-upload__icon":
929
+ apply: "dg-text-white"
930
+ properties:
931
+ margin-right: "0.5rem"
932
+ ".dg-card--file-upload__content":
933
+ apply: "flex-1 flex flex-col gap-1"
934
+ ".dg-card--file-upload .dg-item-title":
935
+ apply: "text-base font-semibold dg-text-white"
936
+ properties:
937
+ display: "flex"
938
+ align-items: "center"
939
+ ".dg-card--file-upload .dg-prose":
940
+ apply: "text-sm dg-text-muted"
941
+ media:
942
+ "(max-width: 767px)":
943
+ ".dg-card--file-upload__content":
944
+ apply: "flex-row items-center gap-3"
945
+ ".dg-card--file-upload .dg-item-title":
946
+ properties:
947
+ margin-bottom: "0"
948
+ flex-shrink: "0"
949
+ ".dg-card--file-upload .dg-prose":
950
+ properties:
951
+ flex: "1"
952
+ white-space: "nowrap"
953
+ overflow: "hidden"
954
+ text-overflow: "ellipsis"
955
+ "(min-width: 768px)":
956
+ ".dg-card--file-upload .dg-item-title":
957
+ properties:
958
+ margin-bottom: "0.25rem"
959
+ elements:
960
+ image:
961
+ css:
962
+ ".dg-card__image":
963
+ apply: "w-full overflow-hidden flex-shrink-0"
964
+ properties:
965
+ border-radius: "0.5rem 0.5rem 0 0"
966
+ ".dg-card__image img":
967
+ apply: "w-full h-full object-cover block"
968
+ ".dg-card__image--small":
969
+ apply: "h-[7.5rem]"
970
+ ".dg-card__image--medium":
971
+ apply: "h-[10rem]"
972
+ ".dg-card__image--large":
973
+ apply: "h-[15rem]"
974
+ ".dg-card__image--aspect-4-3":
975
+ apply: "aspect-[4/3] h-auto"
976
+ icon:
977
+ css:
978
+ ".dg-card__icon":
979
+ apply: "flex items-center p-3 pt-6"
980
+ ".dg-card__icon i, .dg-card__icon svg":
981
+ apply: "text-5xl dg-text-primary"
982
+ ".dg-card__icon--left":
983
+ apply: "justify-start"
984
+ ".dg-card__icon--center":
985
+ apply: "justify-center"
986
+ ".dg-card__icon--right":
987
+ apply: "justify-end"
988
+ media:
989
+ "(min-width: 640px)":
990
+ ".dg-card__icon":
991
+ apply: "p-4 pt-8"
992
+ "(min-width: 1024px)":
993
+ ".dg-card__icon":
994
+ apply: "px-6 pb-6 pt-10"
995
+ header:
996
+ css:
997
+ ".dg-card__header":
998
+ apply: "flex flex-col gap-2 p-3"
999
+ media:
1000
+ "(min-width: 640px)":
1001
+ ".dg-card__header":
1002
+ apply: "p-4"
1003
+ "(min-width: 1024px)":
1004
+ ".dg-card__header":
1005
+ apply: "px-6 pt-6 pb-0"
1006
+ body:
1007
+ css:
1008
+ ".dg-card__body":
1009
+ apply: "flex flex-col gap-3 p-3 flex-1"
1010
+ media:
1011
+ "(min-width: 640px)":
1012
+ ".dg-card__body":
1013
+ apply: "p-4"
1014
+ "(min-width: 1024px)":
1015
+ ".dg-card__body":
1016
+ apply: "px-6 pb-6 pt-0"
1017
+ footer:
1018
+ css:
1019
+ ".dg-card__footer":
1020
+ apply: "flex items-center gap-3 p-3 border-t border-transparent mt-auto"
1021
+ ".dg-card__footer--bordered":
1022
+ apply: "border-t-dg-pebble"
1023
+ media:
1024
+ "(min-width: 640px)":
1025
+ ".dg-card__footer":
1026
+ apply: "p-4"
1027
+ "(min-width: 1024px)":
1028
+ ".dg-card__footer":
1029
+ apply: "p-6"
1030
+ examples:
1031
+ - title: "Default Card"
1032
+ ast:
1033
+ tag: div
1034
+ props:
1035
+ class: "dg-card"
1036
+ children:
1037
+ - tag: h3
1038
+ props:
1039
+ class: "dg-card-heading"
1040
+ children:
1041
+ - "Card Title"
1042
+ - tag: p
1043
+ children:
1044
+ - "Card content goes here."
1045
+ - title: "Compact Card"
1046
+ ast:
1047
+ tag: div
1048
+ props:
1049
+ class: "dg-card dg-card--compact"
1050
+ children:
1051
+ - tag: h3
1052
+ props:
1053
+ class: "dg-card-heading"
1054
+ children:
1055
+ - "Compact Card"
1056
+ - tag: p
1057
+ children:
1058
+ - "Card content goes here."
1059
+ - title: "Spacious Card"
1060
+ ast:
1061
+ tag: div
1062
+ props:
1063
+ class: "dg-card dg-card--spacious"
1064
+ children:
1065
+ - tag: h3
1066
+ props:
1067
+ class: "dg-card-heading"
1068
+ children:
1069
+ - "Spacious Card"
1070
+ - tag: p
1071
+ children:
1072
+ - "Card content goes here."
1073
+ - title: "Card with Image and Footer"
1074
+ description: "Structured card with image, header, body, and footer"
1075
+ ast:
1076
+ tag: div
1077
+ props:
1078
+ class: "dg-card dg-card--structured"
1079
+ style: "max-width: 400px;"
1080
+ children:
1081
+ - tag: div
1082
+ props:
1083
+ class: "dg-card__image dg-card__image--medium"
1084
+ children:
1085
+ - tag: img
1086
+ props:
1087
+ src: "https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=800&h=400&fit=crop"
1088
+ alt: "Technology workspace"
1089
+ - tag: div
1090
+ props:
1091
+ class: "dg-card__header"
1092
+ children:
1093
+ - tag: h3
1094
+ props:
1095
+ class: "dg-card-heading"
1096
+ children:
1097
+ - "Build with APIs"
1098
+ - tag: div
1099
+ props:
1100
+ class: "dg-card__body"
1101
+ children:
1102
+ - tag: p
1103
+ props:
1104
+ class: "dg-prose"
1105
+ children:
1106
+ - "Voice AI Infrastructure for Builders. For developers and product teams ready to move fast with flexible APIs."
1107
+ - tag: div
1108
+ props:
1109
+ class: "dg-card__footer"
1110
+ children:
1111
+ - tag: button
1112
+ props:
1113
+ class: "dg-btn dg-btn--primary"
1114
+ children:
1115
+ - "Start Building"
1116
+ - title: "Card with Icon (Left Aligned)"
1117
+ description: "Card with Font Awesome icon, left-aligned (default)"
1118
+ ast:
1119
+ tag: div
1120
+ props:
1121
+ class: "dg-card dg-card--structured"
1122
+ style: "max-width: 400px;"
1123
+ children:
1124
+ - tag: div
1125
+ props:
1126
+ class: "dg-card__icon dg-card__icon--left"
1127
+ children:
1128
+ - tag: i
1129
+ props:
1130
+ class: "fas fa-rocket"
1131
+ - tag: div
1132
+ props:
1133
+ class: "dg-card__header"
1134
+ children:
1135
+ - tag: h3
1136
+ props:
1137
+ class: "dg-card-heading"
1138
+ children:
1139
+ - "Fast Integration"
1140
+ - tag: div
1141
+ props:
1142
+ class: "dg-card__body"
1143
+ children:
1144
+ - tag: p
1145
+ props:
1146
+ class: "dg-prose"
1147
+ children:
1148
+ - "Get started quickly with our streamlined API and comprehensive documentation."
1149
+ - tag: div
1150
+ props:
1151
+ class: "dg-card__footer"
1152
+ children:
1153
+ - tag: button
1154
+ props:
1155
+ class: "dg-btn dg-btn--primary"
1156
+ children:
1157
+ - "Get Started"
1158
+
1159
+ # ---------------------------------------------------------------------------
1160
+ # LAYOUT - CODE BLOCK
1161
+ # ---------------------------------------------------------------------------
1162
+ code-block:
1163
+ metadata:
1164
+ title: "Code Block"
1165
+ description: "Preformatted code/text display with scrolling"
1166
+ category: "application-ui"
1167
+ section: "Page Examples"
1168
+ subsection: "Detail Screens"
1169
+ tags: [code, pre, monospace]
1170
+ css:
1171
+ ".dg-code-block":
1172
+ apply: "w-full rounded-lg border border-dg-pebble bg-dg-charcoal overflow-auto p-2 my-3 max-h-[12.5rem]"
1173
+ properties:
1174
+ -webkit-overflow-scrolling: "touch"
1175
+ ".dg-code-block pre":
1176
+ apply: "m-0 p-0 font-dg-mono text-xs dg-text-fog whitespace-pre-wrap break-words"
1177
+ properties:
1178
+ line-height: "1.3"
1179
+ media:
1180
+ "(min-width: 640px)":
1181
+ ".dg-code-block":
1182
+ apply: "p-3 my-4 max-h-[15.625rem]"
1183
+ ".dg-code-block pre":
1184
+ apply: "text-sm"
1185
+ "(min-width: 1024px)":
1186
+ ".dg-code-block":
1187
+ apply: "max-h-[18.75rem]"
1188
+ variants:
1189
+ compact:
1190
+ css:
1191
+ ".dg-code-block--compact":
1192
+ apply: "max-h-[7.5rem] p-1"
1193
+ media:
1194
+ "(min-width: 640px)":
1195
+ ".dg-code-block--compact":
1196
+ apply: "max-h-[9.375rem] p-2"
1197
+ tall:
1198
+ css:
1199
+ ".dg-code-block--tall":
1200
+ apply: "max-h-[18.75rem]"
1201
+ media:
1202
+ "(min-width: 640px)":
1203
+ ".dg-code-block--tall":
1204
+ apply: "max-h-[25rem]"
1205
+ "(min-width: 1024px)":
1206
+ ".dg-code-block--tall":
1207
+ apply: "max-h-[31.25rem]"
1208
+ no-scroll:
1209
+ css:
1210
+ ".dg-code-block--no-scroll":
1211
+ apply: "overflow-visible max-h-none"
1212
+ examples:
1213
+ - title: "Code Block"
1214
+ ast:
1215
+ tag: div
1216
+ props:
1217
+ class: "dg-code-block"
1218
+ children:
1219
+ - tag: pre
1220
+ children:
1221
+ - "const dg = new Deepgram(apiKey);\nconst response = await dg.transcription.preRecorded(\n { url: audioUrl },\n { model: 'nova-3' }\n);"
1222
+
1223
+ # ---------------------------------------------------------------------------
1224
+ # TYPOGRAPHY - HERO
1225
+ # ---------------------------------------------------------------------------
1226
+ hero:
1227
+ metadata:
1228
+ title: "Hero Section"
1229
+ description: "Large page header with title, subtitle, and call-to-action buttons"
1230
+ category: "application-ui"
1231
+ section: "Headings"
1232
+ subsection: "Page Headings"
1233
+ tags: [hero, header, heading, cta]
1234
+ css:
1235
+ ".dg-hero-title":
1236
+ apply: "text-center font-bold font-dg-noto text-5xl leading-tight mb-6 bg-gradient-to-r from-dg-secondary to-dg-primary bg-clip-text"
1237
+ properties:
1238
+ -webkit-text-fill-color: "transparent"
1239
+ letter-spacing: "-0.02em"
1240
+ font-feature-settings: "\"liga\" 0, \"dlig\" 0, \"hlig\" 0, \"ordn\" 0, \"ss09\", \"kern\""
1241
+ font-kerning: "normal"
1242
+ ".dg-hero":
1243
+ apply: "w-full text-center py-16 px-4"
1244
+ ".dg-hero__content":
1245
+ apply: "flex flex-col gap-6 mx-auto max-w-[53.125rem]"
1246
+ ".dg-hero__announcement":
1247
+ apply: "inline-flex items-center justify-center rounded-full border bg-dg-translucent border-dg-slate/30 py-2 px-5 mx-auto mb-2 no-underline cursor-pointer w-fit gap-3 transition-all duration-200"
1248
+ ".dg-hero__announcement:hover":
1249
+ apply: "border-dg-primary -translate-y-0.5"
1250
+ properties:
1251
+ background-color: "rgba(19, 239, 149, 0.1)"
1252
+ box-shadow: "0 0.25rem 0.75rem rgba(19, 239, 149, 0.15)"
1253
+ ".dg-hero__announcement-text":
1254
+ apply: "dg-text-white text-sm font-normal whitespace-nowrap"
1255
+ ".dg-hero__announcement-cta":
1256
+ apply: "inline-flex items-center dg-text-secondary text-sm font-semibold gap-2 transition-[gap] duration-200"
1257
+ ".dg-hero__announcement:hover .dg-hero__announcement-cta":
1258
+ apply: "gap-3"
1259
+ ".dg-hero__body":
1260
+ apply: "text-center dg-text-fog text-lg leading-7 font-normal mx-auto max-w-[53.125rem]"
1261
+ ".dg-hero__actions":
1262
+ apply: "flex items-center justify-center flex-wrap gap-4 mt-2"
1263
+ media:
1264
+ "(max-width: 1024px)":
1265
+ ".dg-hero-title":
1266
+ apply: "text-4xl"
1267
+ "(max-width: 768px)":
1268
+ ".dg-hero-title":
1269
+ apply: "text-3xl"
1270
+ ".dg-hero":
1271
+ apply: "py-12 px-4"
1272
+ ".dg-hero__content":
1273
+ apply: "gap-5"
1274
+ ".dg-hero__body":
1275
+ apply: "text-base leading-relaxed"
1276
+ "(max-width: 640px)":
1277
+ ".dg-hero-title":
1278
+ apply: "text-2xl"
1279
+ ".dg-hero":
1280
+ apply: "py-8 px-4"
1281
+ ".dg-hero__announcement-text":
1282
+ apply: "text-xs whitespace-normal"
1283
+ ".dg-hero__announcement-cta":
1284
+ apply: "text-xs"
1285
+ ".dg-hero__body":
1286
+ apply: "text-[0.9375rem] leading-normal"
1287
+ ".dg-hero__actions":
1288
+ apply: "flex-col w-full"
1289
+ ".dg-hero__actions > *":
1290
+ apply: "w-full"
1291
+ examples:
1292
+ - title: "Full Hero with Announcement"
1293
+ ast:
1294
+ tag: section
1295
+ props:
1296
+ class: "dg-hero"
1297
+ children:
1298
+ - tag: div
1299
+ props:
1300
+ class: "dg-hero__content"
1301
+ children:
1302
+ - tag: a
1303
+ props:
1304
+ href: "#"
1305
+ class: "dg-hero__announcement"
1306
+ children:
1307
+ - tag: span
1308
+ props:
1309
+ class: "dg-hero__announcement-text"
1310
+ children:
1311
+ - "New: Meet Flux - speech recognition for real-time voice agents"
1312
+ - tag: span
1313
+ props:
1314
+ class: "dg-hero__announcement-cta"
1315
+ children:
1316
+ - "Try It Now →"
1317
+ - tag: h1
1318
+ props:
1319
+ class: "dg-hero-title"
1320
+ children:
1321
+ - "Voice AI APIs that just work"
1322
+ - tag: p
1323
+ props:
1324
+ class: "dg-hero__body"
1325
+ children:
1326
+ - "Build with the most accurate, realistic, and cost-effective APIs for speech-to-text, text-to-speech, and voice agents."
1327
+ - tag: div
1328
+ props:
1329
+ class: "dg-hero__actions"
1330
+ children:
1331
+ - tag: button
1332
+ props:
1333
+ class: "dg-btn dg-btn--primary"
1334
+ type: button
1335
+ children:
1336
+ - "Sign Up Free"
1337
+ - tag: button
1338
+ props:
1339
+ class: "dg-btn dg-btn--secondary"
1340
+ type: button
1341
+ children:
1342
+ - "Playground"
1343
+ - title: "Simple Hero"
1344
+ ast:
1345
+ tag: section
1346
+ props:
1347
+ class: "dg-hero"
1348
+ children:
1349
+ - tag: div
1350
+ props:
1351
+ class: "dg-hero__content"
1352
+ children:
1353
+ - tag: h1
1354
+ props:
1355
+ class: "dg-hero-title"
1356
+ children:
1357
+ - "Welcome to Our Platform"
1358
+ - tag: p
1359
+ props:
1360
+ class: "dg-hero__body"
1361
+ children:
1362
+ - "Build amazing experiences with our component library"
1363
+ - title: "Hero with Single CTA"
1364
+ ast:
1365
+ tag: section
1366
+ props:
1367
+ class: "dg-hero"
1368
+ children:
1369
+ - tag: div
1370
+ props:
1371
+ class: "dg-hero__content"
1372
+ children:
1373
+ - tag: h1
1374
+ props:
1375
+ class: "dg-hero-title"
1376
+ children:
1377
+ - "Get Started Today"
1378
+ - tag: p
1379
+ props:
1380
+ class: "dg-hero__body"
1381
+ children:
1382
+ - "Join thousands of developers building with Deepgram"
1383
+ - tag: div
1384
+ props:
1385
+ class: "dg-hero__actions"
1386
+ children:
1387
+ - tag: button
1388
+ props:
1389
+ class: "dg-btn dg-btn--primary"
1390
+ type: button
1391
+ children:
1392
+ - "Start Building"
1393
+
1394
+ # ---------------------------------------------------------------------------
1395
+ # TYPOGRAPHY - HEADINGS
1396
+ # ---------------------------------------------------------------------------
1397
+ section-heading:
1398
+ metadata:
1399
+ title: "Section Header"
1400
+ description: "Consistent section heading with multiple levels"
1401
+ category: "application-ui"
1402
+ section: "Headings"
1403
+ subsection: "Section Headings"
1404
+ tags: [heading, section, title]
1405
+ css:
1406
+ ".dg-section-heading":
1407
+ apply: "font-semibold font-dg-noto text-2xl dg-text-white mb-6 flex flex-wrap items-baseline gap-2"
1408
+ ".dg-section-heading small":
1409
+ apply: "font-normal text-base dg-text-muted"
1410
+ media:
1411
+ "(max-width: 640px)":
1412
+ ".dg-section-heading":
1413
+ apply: "text-xl mb-3 gap-1.5"
1414
+ ".dg-section-heading small":
1415
+ apply: "text-sm"
1416
+ examples:
1417
+ - title: "Section Heading"
1418
+ ast:
1419
+ tag: h2
1420
+ props:
1421
+ class: "dg-section-heading"
1422
+ children:
1423
+ - "Section Title"
1424
+ - title: "Section Heading with Context"
1425
+ ast:
1426
+ tag: h2
1427
+ props:
1428
+ class: "dg-section-heading"
1429
+ children:
1430
+ - "Transcription Results"
1431
+ - tag: small
1432
+ children:
1433
+ - "3 files processed"
1434
+
1435
+ page-heading:
1436
+ metadata:
1437
+ title: "Page Heading"
1438
+ description: "Simple page heading with title and optional description"
1439
+ category: "application-ui"
1440
+ section: "Headings"
1441
+ subsection: "Page Headings"
1442
+ tags: [heading, page, title, description]
1443
+ css:
1444
+ ".dg-page-heading":
1445
+ apply: "mb-8"
1446
+ ".dg-page-heading__title":
1447
+ apply: "font-semibold font-dg-noto text-4xl dg-text-white mb-2 leading-tight"
1448
+ ".dg-page-heading__description":
1449
+ apply: "dg-text-muted text-lg leading-relaxed m-0 max-w-[65ch]"
1450
+ media:
1451
+ "(max-width: 768px)":
1452
+ ".dg-page-heading__title":
1453
+ apply: "text-3xl"
1454
+ ".dg-page-heading__description":
1455
+ apply: "text-base"
1456
+ "(max-width: 640px)":
1457
+ ".dg-page-heading":
1458
+ apply: "mb-6"
1459
+ ".dg-page-heading__title":
1460
+ apply: "text-2xl"
1461
+ ".dg-page-heading__description":
1462
+ apply: "text-[0.9375rem]"
1463
+ examples:
1464
+ - title: "Simple Page Heading"
1465
+ ast:
1466
+ tag: div
1467
+ props:
1468
+ class: "dg-page-heading"
1469
+ children:
1470
+ - tag: h1
1471
+ props:
1472
+ class: "dg-page-heading__title"
1473
+ children:
1474
+ - "Dashboard"
1475
+ - title: "Page Heading with Description"
1476
+ ast:
1477
+ tag: div
1478
+ props:
1479
+ class: "dg-page-heading"
1480
+ children:
1481
+ - tag: h1
1482
+ props:
1483
+ class: "dg-page-heading__title"
1484
+ children:
1485
+ - "Transcription"
1486
+ - tag: p
1487
+ props:
1488
+ class: "dg-page-heading__description"
1489
+ children:
1490
+ - "Upload audio files or record live to get accurate transcriptions powered by Deepgram."
1491
+
1492
+ card-heading:
1493
+ metadata:
1494
+ title: "Card Heading"
1495
+ description: "Heading for card components"
1496
+ category: "application-ui"
1497
+ section: "Headings"
1498
+ subsection: "Section Headings"
1499
+ tags: [heading, card, title]
1500
+ css:
1501
+ ".dg-card-heading":
1502
+ apply: "font-medium font-dg-noto text-xl dg-text-white mb-3 flex flex-wrap items-baseline gap-1.5"
1503
+ ".dg-card-heading small":
1504
+ apply: "font-normal text-sm dg-text-muted"
1505
+ examples:
1506
+ - title: "Card Heading"
1507
+ ast:
1508
+ tag: h3
1509
+ props:
1510
+ class: "dg-card-heading"
1511
+ children:
1512
+ - "Card Title"
1513
+
1514
+ item-title:
1515
+ metadata:
1516
+ title: "Item Title"
1517
+ description: "Title for list items and small components"
1518
+ category: "application-ui"
1519
+ section: "Headings"
1520
+ subsection: "Section Headings"
1521
+ tags: [heading, item, title]
1522
+ css:
1523
+ ".dg-item-title":
1524
+ apply: "font-medium font-dg-noto text-base dg-text-white mb-1 flex flex-wrap items-baseline gap-1"
1525
+ ".dg-item-title small":
1526
+ apply: "font-normal text-xs dg-text-muted"
1527
+ examples:
1528
+ - title: "Item Title"
1529
+ ast:
1530
+ tag: h4
1531
+ props:
1532
+ class: "dg-item-title"
1533
+ children:
1534
+ - "Item Name"
1535
+
1536
+ # ---------------------------------------------------------------------------
1537
+ # TYPOGRAPHY - PROSE
1538
+ # ---------------------------------------------------------------------------
1539
+ prose:
1540
+ metadata:
1541
+ title: "Prose"
1542
+ description: "Body text component with responsive sizing"
1543
+ category: "application-ui"
1544
+ section: "Headings"
1545
+ subsection: "Section Headings"
1546
+ tags: [text, prose, body, paragraph]
1547
+ css:
1548
+ ".dg-prose":
1549
+ apply: "w-full dg-text-fog text-sm leading-snug mb-3"
1550
+ ".dg-prose.dg-prose--block":
1551
+ apply: "max-w-none w-full"
1552
+ media:
1553
+ "(min-width: 640px)":
1554
+ ".dg-prose":
1555
+ apply: "text-base mb-4 max-w-[65ch]"
1556
+ variants:
1557
+ large:
1558
+ css:
1559
+ ".dg-prose--large":
1560
+ apply: "text-base"
1561
+ media:
1562
+ "(min-width: 640px)":
1563
+ ".dg-prose--large":
1564
+ apply: "text-lg"
1565
+ "(min-width: 1024px)":
1566
+ ".dg-prose--large":
1567
+ apply: "text-xl"
1568
+ small:
1569
+ css:
1570
+ ".dg-prose--small":
1571
+ apply: "text-xs dg-text-muted"
1572
+ media:
1573
+ "(min-width: 640px)":
1574
+ ".dg-prose--small":
1575
+ apply: "text-sm"
1576
+ examples:
1577
+ - title: "Prose"
1578
+ ast:
1579
+ tag: p
1580
+ props:
1581
+ class: "dg-prose"
1582
+ children:
1583
+ - "Body text content goes here."
1584
+
1585
+ # ---------------------------------------------------------------------------
1586
+ # FORMS
1587
+ # ---------------------------------------------------------------------------
1588
+ input:
1589
+ metadata:
1590
+ title: "Input Group"
1591
+ description: "Text input fields with labels, placeholders, and validation states"
1592
+ category: "application-ui"
1593
+ section: "Forms"
1594
+ subsection: "Input Groups"
1595
+ tags: [input, text, form, field, label]
1596
+ css:
1597
+ ".dg-input":
1598
+ apply: "w-full px-4 py-3 rounded border border-dg-pebble bg-dg-charcoal dg-text-white font-dg-sans text-sm outline-none transition-all duration-300 shadow-dg-sm"
1599
+ properties:
1600
+ height: "2.75rem"
1601
+ ".dg-input::placeholder":
1602
+ apply: "dg-text-muted"
1603
+ ".dg-input:focus":
1604
+ apply: "border-dg-primary"
1605
+ properties:
1606
+ box-shadow: "0 0 0 0.0625rem theme(colors.dg-primary)"
1607
+ ".dg-input:disabled":
1608
+ apply: "opacity-50 cursor-not-allowed"
1609
+ variants:
1610
+ inline:
1611
+ css:
1612
+ ".dg-input--inline":
1613
+ apply: "min-w-[12.5rem]"
1614
+ full:
1615
+ css:
1616
+ ".dg-input--full":
1617
+ apply: "max-w-none"
1618
+ select:
1619
+ css:
1620
+ ".dg-input[type=\"select\"], select.dg-input":
1621
+ apply: "appearance-none"
1622
+ properties:
1623
+ background-image: "url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='rgb(255,255,255)' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\")"
1624
+ background-position: "right 0.75rem center"
1625
+ background-repeat: "no-repeat"
1626
+ background-size: "1.5em 1.5em"
1627
+ padding-right: "2.5rem"
1628
+ examples:
1629
+ - title: "Basic Text Input"
1630
+ ast:
1631
+ tag: div
1632
+ props:
1633
+ class: "dg-form-field"
1634
+ children:
1635
+ - tag: label
1636
+ props:
1637
+ class: "dg-form-label"
1638
+ children:
1639
+ - "Email Address"
1640
+ - tag: input
1641
+ props:
1642
+ type: text
1643
+ class: "dg-input"
1644
+ placeholder: "you@example.com"
1645
+ - title: "Input with Helper Text"
1646
+ ast:
1647
+ tag: div
1648
+ props:
1649
+ class: "dg-form-field"
1650
+ children:
1651
+ - tag: label
1652
+ props:
1653
+ class: "dg-form-label"
1654
+ children:
1655
+ - "API Key"
1656
+ - tag: input
1657
+ props:
1658
+ type: text
1659
+ class: "dg-input"
1660
+ placeholder: "Enter your Deepgram API key"
1661
+ - tag: span
1662
+ props:
1663
+ class: "dg-form-helper"
1664
+ children:
1665
+ - "Find your API key in the Deepgram Console"
1666
+ - title: "Input with Error"
1667
+ ast:
1668
+ tag: div
1669
+ props:
1670
+ class: "dg-form-field dg-form-field--error"
1671
+ children:
1672
+ - tag: label
1673
+ props:
1674
+ class: "dg-form-label"
1675
+ children:
1676
+ - "Email"
1677
+ - tag: input
1678
+ props:
1679
+ type: email
1680
+ class: "dg-input"
1681
+ value: "invalid-email"
1682
+ - tag: span
1683
+ props:
1684
+ class: "dg-form-helper"
1685
+ children:
1686
+ - "Please enter a valid email address"
1687
+
1688
+ textarea:
1689
+ metadata:
1690
+ title: "Textarea"
1691
+ description: "Multi-line text input"
1692
+ category: "application-ui"
1693
+ section: "Forms"
1694
+ subsection: "Input Groups"
1695
+ tags: [textarea, input, form]
1696
+ css:
1697
+ ".dg-textarea":
1698
+ apply: "dg-input"
1699
+ properties:
1700
+ min-height: "6.25rem"
1701
+ resize: "vertical"
1702
+ height: "auto"
1703
+ examples:
1704
+ - title: "Textarea"
1705
+ ast:
1706
+ tag: div
1707
+ props:
1708
+ class: "dg-form-field"
1709
+ children:
1710
+ - tag: label
1711
+ props:
1712
+ class: "dg-form-label"
1713
+ children:
1714
+ - "Message"
1715
+ - tag: textarea
1716
+ props:
1717
+ class: "dg-textarea"
1718
+ placeholder: "Enter your message..."
1719
+
1720
+ checkbox:
1721
+ metadata:
1722
+ title: "Checkbox"
1723
+ description: "Checkbox inputs for multi-select options"
1724
+ category: "application-ui"
1725
+ section: "Forms"
1726
+ subsection: "Checkboxes"
1727
+ tags: [checkbox, input, form, select]
1728
+ css:
1729
+ ".dg-checkbox":
1730
+ apply: "appearance-none w-5 h-5 rounded border border-dg-pebble bg-dg-charcoal cursor-pointer transition-all duration-200 flex-shrink-0"
1731
+ properties:
1732
+ position: "relative"
1733
+ ".dg-checkbox:checked":
1734
+ apply: "bg-dg-primary border-dg-primary"
1735
+ ".dg-checkbox:checked::after":
1736
+ properties:
1737
+ content: "\"\""
1738
+ position: "absolute"
1739
+ left: "0.375rem"
1740
+ top: "0.125rem"
1741
+ width: "0.3125rem"
1742
+ height: "0.625rem"
1743
+ border: "solid black"
1744
+ border-width: "0 0.125rem 0.125rem 0"
1745
+ transform: "rotate(45deg)"
1746
+ ".dg-checkbox:focus":
1747
+ apply: "outline-none"
1748
+ properties:
1749
+ box-shadow: "0 0 0 0.125rem theme(colors.dg-primary/50)"
1750
+ ".dg-checkbox-label":
1751
+ apply: "flex items-start gap-2 cursor-pointer text-sm dg-text-fog"
1752
+ ".dg-checkbox-label:hover .dg-checkbox":
1753
+ apply: "border-dg-slate"
1754
+ ".dg-checkbox-description":
1755
+ apply: "flex flex-col gap-2"
1756
+ ".dg-checkbox-group":
1757
+ apply: "flex flex-col gap-3"
1758
+ examples:
1759
+ - title: "Basic Checkbox"
1760
+ ast:
1761
+ tag: label
1762
+ props:
1763
+ class: "dg-checkbox-label"
1764
+ children:
1765
+ - tag: input
1766
+ props:
1767
+ type: checkbox
1768
+ class: "dg-checkbox"
1769
+ - "Enable notifications"
1770
+ - title: "Checkbox Group"
1771
+ ast:
1772
+ tag: div
1773
+ props:
1774
+ class: "dg-checkbox-group"
1775
+ children:
1776
+ - tag: label
1777
+ props:
1778
+ class: "dg-checkbox-label"
1779
+ children:
1780
+ - tag: input
1781
+ props:
1782
+ type: checkbox
1783
+ class: "dg-checkbox"
1784
+ - "Speech-to-Text"
1785
+ - tag: label
1786
+ props:
1787
+ class: "dg-checkbox-label"
1788
+ children:
1789
+ - tag: input
1790
+ props:
1791
+ type: checkbox
1792
+ class: "dg-checkbox"
1793
+ - "Text-to-Speech"
1794
+
1795
+ form-field:
1796
+ metadata:
1797
+ title: "Form Section"
1798
+ description: "Form section container with optional heading"
1799
+ category: "application-ui"
1800
+ section: "Forms"
1801
+ subsection: "Form Layouts"
1802
+ tags: [form, section, layout]
1803
+ css:
1804
+ ".dg-form-field":
1805
+ apply: "flex flex-col gap-3 mb-4 w-full"
1806
+ ".dg-form-field--full":
1807
+ apply: "max-w-none"
1808
+ ".dg-form-field--error .dg-input, .dg-form-field--error .dg-textarea":
1809
+ apply: "border-dg-danger"
1810
+ ".dg-form-field--error .dg-form-helper":
1811
+ apply: "dg-text-danger"
1812
+ ".dg-form-field--success .dg-input, .dg-form-field--success .dg-textarea":
1813
+ apply: "border-dg-success"
1814
+ ".dg-form-field--success .dg-form-helper":
1815
+ apply: "dg-text-success"
1816
+ ".dg-form-label":
1817
+ apply: "text-sm font-medium dg-text-white"
1818
+ ".dg-form-error":
1819
+ apply: "text-xs dg-text-danger block"
1820
+ properties:
1821
+ margin: "0"
1822
+ ".dg-form-helper":
1823
+ apply: "text-xs dg-text-muted block"
1824
+ properties:
1825
+ margin: "0"
1826
+ media:
1827
+ "(min-width: 640px)":
1828
+ ".dg-form-field":
1829
+ apply: "max-w-md"
1830
+ examples:
1831
+ - title: "Simple Form Section"
1832
+ ast:
1833
+ tag: div
1834
+ props:
1835
+ class: "dg-form-field"
1836
+ children:
1837
+ - tag: label
1838
+ props:
1839
+ class: "dg-form-label"
1840
+ children:
1841
+ - "Name"
1842
+ - tag: input
1843
+ props:
1844
+ type: text
1845
+ class: "dg-input"
1846
+ placeholder: "Enter your name"
1847
+
1848
+ drag-drop-zone:
1849
+ metadata:
1850
+ title: "File Upload Zone"
1851
+ description: "Drag-and-drop file upload area with click-to-browse"
1852
+ category: "application-ui"
1853
+ section: "Forms"
1854
+ subsection: "Input Groups"
1855
+ tags: [file, upload, drag-drop, input]
1856
+ css:
1857
+ ".dg-drag-drop-zone":
1858
+ apply: "relative border-2 border-dashed border-dg-pebble rounded-lg bg-dg-charcoal transition-all duration-200 flex flex-col items-center justify-center gap-3 cursor-pointer"
1859
+ properties:
1860
+ padding: "3rem 2rem"
1861
+ min-height: "12.5rem"
1862
+ ".dg-drag-drop-zone:hover":
1863
+ apply: "border-dg-slate bg-dg-background"
1864
+ ".dg-drag-drop-zone.drag-over":
1865
+ apply: "border-dg-primary bg-dg-translucent"
1866
+ ".dg-drag-drop-zone__input":
1867
+ apply: "absolute inset-0 w-full h-full opacity-0 cursor-pointer"
1868
+ ".dg-drag-drop-zone__icon":
1869
+ apply: "text-5xl dg-text-muted"
1870
+ ".dg-drag-drop-zone:hover .dg-drag-drop-zone__icon":
1871
+ apply: "dg-text-primary"
1872
+ ".dg-drag-drop-zone__text":
1873
+ apply: "text-base dg-text-white font-medium"
1874
+ ".dg-drag-drop-zone__hint":
1875
+ apply: "text-sm dg-text-muted"
1876
+ examples:
1877
+ - title: "File Upload Zone"
1878
+ ast:
1879
+ tag: div
1880
+ props:
1881
+ class: "dg-drag-drop-zone"
1882
+ children:
1883
+ - tag: input
1884
+ props:
1885
+ type: file
1886
+ class: "dg-drag-drop-zone__input"
1887
+ - tag: i
1888
+ props:
1889
+ class: "fas fa-cloud-upload-alt dg-drag-drop-zone__icon"
1890
+ - tag: p
1891
+ props:
1892
+ class: "dg-drag-drop-zone__text"
1893
+ children:
1894
+ - "Drop files here or click to browse"
1895
+ - tag: p
1896
+ props:
1897
+ class: "dg-drag-drop-zone__hint"
1898
+ children:
1899
+ - "Supports MP3, WAV, FLAC up to 100MB"
1900
+
1901
+ # ---------------------------------------------------------------------------
1902
+ # STATUS & FEEDBACK
1903
+ # ---------------------------------------------------------------------------
1904
+ status:
1905
+ metadata:
1906
+ title: "Status Banner"
1907
+ description: "Alert/notification banner with different status variants"
1908
+ category: "application-ui"
1909
+ section: "Feedback"
1910
+ subsection: "Alerts"
1911
+ tags: [alert, status, notification, banner]
1912
+ css:
1913
+ ".dg-status":
1914
+ apply: "w-full italic dg-text-fog text-sm leading-snug py-1 my-2"
1915
+ media:
1916
+ "(min-width: 640px)":
1917
+ ".dg-status":
1918
+ apply: "text-base py-2 my-3"
1919
+ variants:
1920
+ info:
1921
+ css:
1922
+ ".dg-status--info":
1923
+ apply: "dg-text-fog"
1924
+ success:
1925
+ css:
1926
+ ".dg-status--success":
1927
+ apply: "dg-text-success"
1928
+ warning:
1929
+ css:
1930
+ ".dg-status--warning":
1931
+ apply: "dg-text-warning"
1932
+ error:
1933
+ css:
1934
+ ".dg-status--error":
1935
+ apply: "dg-text-danger"
1936
+ primary:
1937
+ css:
1938
+ ".dg-status--primary":
1939
+ apply: "dg-text-primary"
1940
+ secondary:
1941
+ css:
1942
+ ".dg-status--secondary":
1943
+ apply: "dg-text-secondary"
1944
+ with-icon:
1945
+ css:
1946
+ ".dg-status--with-icon":
1947
+ apply: "flex items-start gap-1"
1948
+ ".dg-status--with-icon .dg-status__icon":
1949
+ apply: "flex-shrink-0 text-[1em] mt-[0.1em]"
1950
+ compact:
1951
+ css:
1952
+ ".dg-status--compact":
1953
+ apply: "my-1 py-0.5 text-xs"
1954
+ media:
1955
+ "(min-width: 640px)":
1956
+ ".dg-status--compact":
1957
+ apply: "text-sm"
1958
+ examples:
1959
+ - title: "Info Status"
1960
+ ast:
1961
+ tag: div
1962
+ props:
1963
+ class: "dg-status dg-status--info"
1964
+ children:
1965
+ - "Processing your request..."
1966
+ - title: "Success Status"
1967
+ ast:
1968
+ tag: div
1969
+ props:
1970
+ class: "dg-status dg-status--success"
1971
+ children:
1972
+ - "Operation completed successfully!"
1973
+ - title: "Warning Status"
1974
+ ast:
1975
+ tag: div
1976
+ props:
1977
+ class: "dg-status dg-status--warning"
1978
+ children:
1979
+ - "This action cannot be undone."
1980
+ - title: "Error Status"
1981
+ ast:
1982
+ tag: div
1983
+ props:
1984
+ class: "dg-status dg-status--error"
1985
+ children:
1986
+ - "An error occurred. Please try again."
1987
+
1988
+ spinner:
1989
+ metadata:
1990
+ title: "Spinner"
1991
+ description: "Loading spinner animation"
1992
+ category: "application-ui"
1993
+ section: "Feedback"
1994
+ subsection: "Alerts"
1995
+ tags: [spinner, loading, progress]
1996
+ css:
1997
+ ".dg-spinner":
1998
+ apply: "rounded-full size-10 border-[3px] border-dg-pebble border-t-dg-primary mx-auto mb-3 animate-spin"
1999
+ ".dg-processing-title":
2000
+ apply: "font-medium font-dg-noto text-xl dg-text-white mb-1"
2001
+ examples:
2002
+ - title: "Spinner"
2003
+ ast:
2004
+ tag: div
2005
+ props:
2006
+ class: "dg-spinner"
2007
+
2008
+ modal:
2009
+ metadata:
2010
+ title: "Modal"
2011
+ description: "Modal overlay with content"
2012
+ category: "application-ui"
2013
+ section: "Feedback"
2014
+ subsection: "Alerts"
2015
+ tags: [modal, overlay, dialog]
2016
+ css:
2017
+ ".dg-modal-overlay":
2018
+ apply: "hidden fixed inset-0 items-center justify-center bg-black/80 z-50"
2019
+ ".dg-modal-overlay.visible, .dg-modal-overlay--visible":
2020
+ apply: "flex"
2021
+ ".dg-modal-content":
2022
+ apply: "text-center max-w-[25rem] m-3"
2023
+ examples:
2024
+ - title: "Modal"
2025
+ ast:
2026
+ tag: div
2027
+ props:
2028
+ class: "dg-modal-overlay dg-modal-overlay--visible"
2029
+ style: "position: relative; min-height: 200px;"
2030
+ children:
2031
+ - tag: div
2032
+ props:
2033
+ class: "dg-modal-content"
2034
+ children:
2035
+ - tag: div
2036
+ props:
2037
+ class: "dg-spinner"
2038
+ - tag: p
2039
+ props:
2040
+ class: "dg-processing-title"
2041
+ children:
2042
+ - "Processing..."
2043
+
2044
+ # ---------------------------------------------------------------------------
2045
+ # LAYOUT UTILITIES
2046
+ # ---------------------------------------------------------------------------
2047
+ constrain-width:
2048
+ metadata:
2049
+ title: "Constrained Container"
2050
+ description: "Max-width container for readable content areas"
2051
+ category: "application-ui"
2052
+ section: "Layout"
2053
+ subsection: "Containers"
2054
+ tags: [container, layout, max-width]
2055
+ css:
2056
+ ".dg-constrain-width":
2057
+ apply: "w-full"
2058
+ ".dg-center-h":
2059
+ apply: "mx-auto"
2060
+ media:
2061
+ "(min-width: 640px)":
2062
+ ".dg-constrain-width":
2063
+ apply: "max-w-[70rem] mx-auto"
2064
+ examples:
2065
+ - title: "Constrained Container"
2066
+ ast:
2067
+ tag: div
2068
+ props:
2069
+ class: "dg-constrain-width"
2070
+ children:
2071
+ - tag: p
2072
+ props:
2073
+ class: "dg-prose"
2074
+ children:
2075
+ - "Content within a max-width container for readability."
2076
+
2077
+ grid-mobile-stack:
2078
+ metadata:
2079
+ title: "Responsive Grid"
2080
+ description: "Grid that stacks on mobile and displays side-by-side on desktop"
2081
+ category: "application-ui"
2082
+ section: "Layout"
2083
+ subsection: "Containers"
2084
+ tags: [grid, responsive, layout]
2085
+ css:
2086
+ ".dg-grid-mobile-stack":
2087
+ apply: "flex flex-col gap-4"
2088
+ ".dg-grid-mobile-stack > *":
2089
+ apply: "flex-1"
2090
+ media:
2091
+ "(min-width: 640px)":
2092
+ ".dg-grid-mobile-stack":
2093
+ apply: "flex-row gap-4"
2094
+ examples:
2095
+ - title: "Responsive Grid"
2096
+ ast:
2097
+ tag: div
2098
+ props:
2099
+ class: "dg-grid-mobile-stack"
2100
+ children:
2101
+ - tag: div
2102
+ props:
2103
+ class: "dg-card"
2104
+ children:
2105
+ - tag: p
2106
+ children:
2107
+ - "Column 1"
2108
+ - tag: div
2109
+ props:
2110
+ class: "dg-card"
2111
+ children:
2112
+ - tag: p
2113
+ children:
2114
+ - "Column 2"
2115
+
2116
+ # ---------------------------------------------------------------------------
2117
+ # COLUMNS (THREE-COLUMN LAYOUT)
2118
+ # ---------------------------------------------------------------------------
2119
+ columns:
2120
+ metadata:
2121
+ title: "Three-Column Layout"
2122
+ description: "A simple responsive three-column layout that stacks on mobile"
2123
+ category: "application-ui"
2124
+ section: "Layout"
2125
+ subsection: "Multi-Column Layouts"
2126
+ tags: [layout, three-column, sidebar, responsive]
2127
+ css:
2128
+ ".dg-columns":
2129
+ apply: "flex flex-col w-full"
2130
+ ".dg-columns__wrapper":
2131
+ apply: "flex flex-col flex-1 min-w-0"
2132
+ ".dg-column":
2133
+ apply: "px-4 py-6 min-w-0"
2134
+ ".dg-column--main":
2135
+ apply: "flex-1"
2136
+ ".dg-column--sidebar-left": {}
2137
+ ".dg-column--sidebar-right":
2138
+ properties:
2139
+ position: "relative"
2140
+ media:
2141
+ "(min-width: 640px)":
2142
+ ".dg-column":
2143
+ apply: "px-6"
2144
+ "(min-width: 768px)":
2145
+ ".dg-columns":
2146
+ apply: "flex-row"
2147
+ "(min-width: 768px) and (max-width: 1279px)":
2148
+ ".dg-column--sidebar-right":
2149
+ properties:
2150
+ position: "fixed"
2151
+ top: "65px"
2152
+ right: "0"
2153
+ height: "calc(100vh - 65px)"
2154
+ width: "16rem"
2155
+ flex-shrink: "0"
2156
+ transition: "transform 300ms ease"
2157
+ z-index: "20"
2158
+ box-shadow: "-4px 0 16px rgba(0, 0, 0, 0.5)"
2159
+ ".dg-column--sidebar-right.dg-column--sm":
2160
+ properties:
2161
+ width: "20rem"
2162
+ ".dg-column--sidebar-right.dg-column--lg":
2163
+ properties:
2164
+ width: "24rem"
2165
+ ".dg-column--sidebar-right.dg-column--xl":
2166
+ properties:
2167
+ width: "32rem"
2168
+ ".dg-column--sidebar-right.collapsed":
2169
+ properties:
2170
+ transform: "translateX(calc(100% - 2rem))"
2171
+ "(min-width: 1024px)":
2172
+ ".dg-columns__wrapper":
2173
+ apply: "flex-row"
2174
+ ".dg-column--sidebar-left":
2175
+ apply: "w-48 flex-shrink-0"
2176
+ ".dg-column--sidebar-left.dg-column--sm":
2177
+ apply: "w-64 flex-shrink-0"
2178
+ ".dg-column--sidebar-left.dg-column--lg":
2179
+ apply: "w-96 flex-shrink-0"
2180
+ ".dg-column--sidebar-left.dg-column--xl":
2181
+ apply: "w-128 flex-shrink-0"
2182
+ "(min-width: 1280px)":
2183
+ ".dg-column--sidebar-right":
2184
+ properties:
2185
+ width: "16rem"
2186
+ flex-shrink: "0"
2187
+ ".dg-column--sidebar-right.dg-column--sm":
2188
+ properties:
2189
+ width: "20rem"
2190
+ flex-shrink: "0"
2191
+ ".dg-column--sidebar-right.dg-column--lg":
2192
+ properties:
2193
+ width: "24rem"
2194
+ flex-shrink: "0"
2195
+ ".dg-column--sidebar-right.dg-column--xl":
2196
+ properties:
2197
+ width: "32rem"
2198
+ flex-shrink: "0"
2199
+ examples:
2200
+ - title: "Three-Column Layout"
2201
+ ast:
2202
+ tag: div
2203
+ props:
2204
+ class: "dg-columns"
2205
+ style: "min-height: 300px;"
2206
+ children:
2207
+ - tag: div
2208
+ props:
2209
+ class: "dg-columns__wrapper"
2210
+ children:
2211
+ - tag: aside
2212
+ props:
2213
+ class: "dg-column dg-column--sidebar-left"
2214
+ style: "background: rgba(255,255,255,0.03);"
2215
+ children:
2216
+ - tag: p
2217
+ props:
2218
+ class: "dg-prose"
2219
+ children:
2220
+ - "Left Sidebar"
2221
+ - tag: main
2222
+ props:
2223
+ class: "dg-column dg-column--main"
2224
+ children:
2225
+ - tag: p
2226
+ props:
2227
+ class: "dg-prose"
2228
+ children:
2229
+ - "Main Content"
2230
+ - tag: aside
2231
+ props:
2232
+ class: "dg-column dg-column--sidebar-right"
2233
+ style: "background: rgba(255,255,255,0.03);"
2234
+ children:
2235
+ - tag: p
2236
+ props:
2237
+ class: "dg-prose"
2238
+ children:
2239
+ - "Right Sidebar"
2240
+
2241
+ # ---------------------------------------------------------------------------
2242
+ # APPLICATION SHELLS
2243
+ # ---------------------------------------------------------------------------
2244
+ header:
2245
+ metadata:
2246
+ title: "Header"
2247
+ description: "Application header with logo and navigation"
2248
+ category: "application-ui"
2249
+ section: "Application Shells"
2250
+ subsection: "Stacked Layouts"
2251
+ tags: [header, navigation, layout]
2252
+ css:
2253
+ ".dg-header":
2254
+ apply: "w-full"
2255
+ properties:
2256
+ background: "#050506"
2257
+ padding: "1rem 1.5rem"
2258
+ border-bottom: "1px solid rgba(255, 255, 255, 0.1)"
2259
+ ".dg-header__container":
2260
+ apply: "flex items-center justify-between max-w-screen-2xl mx-auto"
2261
+ ".dg-header__logo":
2262
+ apply: "flex items-center gap-3"
2263
+ ".dg-header__logo-image":
2264
+ apply: "h-8 w-auto"
2265
+ ".dg-header__logo-text":
2266
+ apply: "font-dg-noto font-bold text-xl dg-text-white"
2267
+ ".dg-header__nav":
2268
+ apply: "flex items-center gap-4"
2269
+ ".dg-header__profile-link":
2270
+ apply: "-m-1.5 p-1.5 block"
2271
+ ".dg-header__profile-avatar":
2272
+ apply: "size-8 rounded-full bg-gray-800 outline -outline-offset-1 outline-white/10"
2273
+ media:
2274
+ "(max-width: 768px)":
2275
+ ".dg-header":
2276
+ properties:
2277
+ padding: "0.75rem 1rem"
2278
+ ".dg-header__logo-text":
2279
+ apply: "text-lg"
2280
+ examples:
2281
+ - title: "Simple Header with Logo"
2282
+ ast:
2283
+ tag: header
2284
+ props:
2285
+ class: "dg-header"
2286
+ children:
2287
+ - tag: div
2288
+ props:
2289
+ class: "dg-header__container"
2290
+ children:
2291
+ - tag: div
2292
+ props:
2293
+ class: "dg-header__logo"
2294
+ children:
2295
+ - tag: span
2296
+ props:
2297
+ class: "dg-header__logo-text"
2298
+ children:
2299
+ - "Deepgram"
2300
+ - title: "Header with Navigation"
2301
+ ast:
2302
+ tag: header
2303
+ props:
2304
+ class: "dg-header"
2305
+ children:
2306
+ - tag: div
2307
+ props:
2308
+ class: "dg-header__container"
2309
+ children:
2310
+ - tag: div
2311
+ props:
2312
+ class: "dg-header__logo"
2313
+ children:
2314
+ - tag: span
2315
+ props:
2316
+ class: "dg-header__logo-text"
2317
+ children:
2318
+ - "Deepgram"
2319
+ - tag: nav
2320
+ props:
2321
+ class: "dg-header__nav"
2322
+ children:
2323
+ - tag: a
2324
+ props:
2325
+ href: "#"
2326
+ class: "dg-link"
2327
+ children:
2328
+ - "Docs"
2329
+ - tag: a
2330
+ props:
2331
+ href: "#"
2332
+ class: "dg-link"
2333
+ children:
2334
+ - "API"
2335
+
2336
+ footer:
2337
+ metadata:
2338
+ title: "Footer"
2339
+ description: "Simple footer for page layouts"
2340
+ category: "application-ui"
2341
+ section: "Application Shells"
2342
+ subsection: "Stacked Layouts"
2343
+ tags: [footer, layout]
2344
+ css:
2345
+ ".dg-footer":
2346
+ apply: "text-center border-t border-dg-pebble mt-16"
2347
+ examples:
2348
+ - title: "Simple Footer"
2349
+ ast:
2350
+ tag: footer
2351
+ props:
2352
+ class: "dg-footer"
2353
+ children:
2354
+ - tag: div
2355
+ props:
2356
+ class: "dg-section"
2357
+ children:
2358
+ - tag: p
2359
+ props:
2360
+ class: "dg-text-tagline"
2361
+ children:
2362
+ - "© 2024 Deepgram. All rights reserved."
2363
+ - title: "Footer with Links"
2364
+ ast:
2365
+ tag: footer
2366
+ props:
2367
+ class: "dg-footer"
2368
+ children:
2369
+ - tag: div
2370
+ props:
2371
+ class: "dg-section"
2372
+ children:
2373
+ - tag: div
2374
+ props:
2375
+ class: "dg-social-links"
2376
+ children:
2377
+ - tag: a
2378
+ props:
2379
+ href: "#"
2380
+ class: "dg-social-link"
2381
+ children:
2382
+ - tag: i
2383
+ props:
2384
+ class: "fab fa-github"
2385
+ - tag: a
2386
+ props:
2387
+ href: "#"
2388
+ class: "dg-social-link"
2389
+ children:
2390
+ - tag: i
2391
+ props:
2392
+ class: "fab fa-twitter"
2393
+ - tag: p
2394
+ props:
2395
+ class: "dg-text-tagline"
2396
+ children:
2397
+ - "© 2024 Deepgram. All rights reserved."
2398
+
2399
+ # ---------------------------------------------------------------------------
2400
+ # LINKS
2401
+ # ---------------------------------------------------------------------------
2402
+ link:
2403
+ metadata:
2404
+ title: "Link"
2405
+ description: "Primary link with hover effect"
2406
+ category: "application-ui"
2407
+ section: "Navigation"
2408
+ subsection: "Navbars"
2409
+ tags: [link, navigation]
2410
+ css:
2411
+ ".dg-link":
2412
+ apply: "dg-text-primary transition-opacity duration-200"
2413
+ ".dg-link:hover":
2414
+ apply: "opacity-80"
2415
+ ".dg-social-link":
2416
+ apply: "dg-text-fog transition-colors duration-200 text-xl"
2417
+ ".dg-social-link:hover":
2418
+ apply: "dg-text-primary"
2419
+ examples:
2420
+ - title: "Link"
2421
+ ast:
2422
+ tag: a
2423
+ props:
2424
+ href: "#"
2425
+ class: "dg-link"
2426
+ children:
2427
+ - "Learn more"
2428
+
2429
+ # ---------------------------------------------------------------------------
2430
+ # TEXT UTILITIES
2431
+ # ---------------------------------------------------------------------------
2432
+ text-utilities:
2433
+ metadata:
2434
+ title: "Text Utilities"
2435
+ description: "Text color and typography utility classes"
2436
+ category: "application-ui"
2437
+ section: "Elements"
2438
+ subsection: "Buttons"
2439
+ tags: [text, color, utility]
2440
+ css:
2441
+ ".dg-text-center":
2442
+ apply: "text-center"
2443
+ ".dg-text-danger":
2444
+ apply: "text-dg-danger"
2445
+ ".dg-text-success":
2446
+ apply: "text-dg-success"
2447
+ ".dg-text-warning":
2448
+ apply: "text-dg-warning"
2449
+ ".dg-text-primary":
2450
+ apply: "text-dg-primary"
2451
+ ".dg-text-secondary":
2452
+ apply: "text-dg-secondary"
2453
+ ".dg-text-muted":
2454
+ apply: "text-dg-muted"
2455
+ ".dg-text-fog":
2456
+ apply: "text-dg-fog"
2457
+ ".dg-text-white":
2458
+ apply: "text-white"
2459
+ ".dg-text-tagline":
2460
+ apply: "text-center dg-text-fog text-sm"
2461
+ ".dg-text-subtitle":
2462
+ apply: "dg-text-fog text-sm"
2463
+ ".dg-text-heading":
2464
+ apply: "dg-text-white text-base font-medium"
2465
+ ".dg-text-heading--with-margin":
2466
+ apply: "dg-text-white text-base font-medium mb-1"
2467
+ ".dg-text-legal":
2468
+ apply: "text-xs dg-text-muted text-center"
2469
+ examples:
2470
+ - title: "Text Colors"
2471
+ ast:
2472
+ tag: div
2473
+ props:
2474
+ class: "dg-prose"
2475
+ children:
2476
+ - tag: span
2477
+ props:
2478
+ class: "dg-text-primary"
2479
+ children:
2480
+ - "Primary "
2481
+ - tag: span
2482
+ props:
2483
+ class: "dg-text-secondary"
2484
+ children:
2485
+ - "Secondary "
2486
+ - tag: span
2487
+ props:
2488
+ class: "dg-text-success"
2489
+ children:
2490
+ - "Success "
2491
+ - tag: span
2492
+ props:
2493
+ class: "dg-text-danger"
2494
+ children:
2495
+ - "Danger"
2496
+
2497
+ # ---------------------------------------------------------------------------
2498
+ # NEWSLETTER
2499
+ # ---------------------------------------------------------------------------
2500
+ newsletter:
2501
+ metadata:
2502
+ title: "Newsletter Signup"
2503
+ description: "Newsletter subscription form with email input and privacy checkbox"
2504
+ category: "application-ui"
2505
+ section: "Forms"
2506
+ subsection: "Form Layouts"
2507
+ tags: [newsletter, form, email, signup, subscription]
2508
+ css:
2509
+ ".dg-newsletter-container":
2510
+ apply: "flex flex-col gap-4"
2511
+ ".dg-newsletter-container--compact":
2512
+ apply: "flex flex-col gap-3"
2513
+ ".dg-newsletter-form":
2514
+ apply: "flex flex-col gap-4"
2515
+ ".dg-newsletter-form--compact":
2516
+ apply: "flex flex-col gap-3"
2517
+ ".dg-newsletter-form--inline":
2518
+ apply: "flex gap-2 w-full"
2519
+ ".dg-newsletter-header":
2520
+ apply: "flex flex-col gap-3 items-start"
2521
+ ".dg-newsletter-header__content":
2522
+ apply: "flex-1"
2523
+ ".dg-newsletter-header__actions":
2524
+ apply: "w-full"
2525
+ ".dg-logo-container":
2526
+ apply: "flex justify-center"
2527
+ ".dg-logo":
2528
+ apply: "h-8 w-auto"
2529
+ ".dg-social-links":
2530
+ apply: "flex justify-center gap-4"
2531
+ media:
2532
+ "(min-width: 640px)":
2533
+ ".dg-newsletter-form--inline":
2534
+ apply: "w-auto"
2535
+ ".dg-newsletter-header":
2536
+ apply: "flex-row items-center"
2537
+ ".dg-newsletter-header__actions":
2538
+ apply: "w-auto"
2539
+ examples:
2540
+ - title: "Simple Newsletter"
2541
+ ast:
2542
+ tag: div
2543
+ props:
2544
+ class: "dg-newsletter-container"
2545
+ children:
2546
+ - tag: h3
2547
+ props:
2548
+ class: "dg-card-heading"
2549
+ children:
2550
+ - "Stay Updated"
2551
+ - tag: p
2552
+ props:
2553
+ class: "dg-prose"
2554
+ children:
2555
+ - "Get the latest news and updates from Deepgram."
2556
+ - tag: form
2557
+ props:
2558
+ class: "dg-newsletter-form"
2559
+ children:
2560
+ - tag: input
2561
+ props:
2562
+ type: email
2563
+ class: "dg-input"
2564
+ placeholder: "Enter your email"
2565
+ - tag: button
2566
+ props:
2567
+ type: submit
2568
+ class: "dg-btn dg-btn--primary"
2569
+ children:
2570
+ - "Subscribe"
2571
+ - title: "Inline Newsletter"
2572
+ ast:
2573
+ tag: div
2574
+ props:
2575
+ class: "dg-newsletter-container"
2576
+ children:
2577
+ - tag: form
2578
+ props:
2579
+ class: "dg-newsletter-form--inline"
2580
+ children:
2581
+ - tag: input
2582
+ props:
2583
+ type: email
2584
+ class: "dg-input"
2585
+ placeholder: "Enter your email"
2586
+ - tag: button
2587
+ props:
2588
+ type: submit
2589
+ class: "dg-btn dg-btn--primary"
2590
+ children:
2591
+ - "Subscribe"