@donotdev/components 0.0.16 → 0.0.18

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 (97) hide show
  1. package/dist/advanced/Bento/Bento.d.ts +1 -1
  2. package/dist/advanced/Bento/Bento.js +1 -1
  3. package/dist/advanced/Code/CodeContent.d.ts.map +1 -1
  4. package/dist/advanced/Code/CodeContent.js +23 -6
  5. package/dist/advanced/Code/CodeSkeleton.js +4 -4
  6. package/dist/advanced/ImageGallery/ImageGallery.d.ts.map +1 -1
  7. package/dist/advanced/ImageGallery/ImageGallery.js +11 -5
  8. package/dist/advanced/JsonViewer/JsonViewer.d.ts +1 -1
  9. package/dist/advanced/JsonViewer/JsonViewer.d.ts.map +1 -1
  10. package/dist/advanced/JsonViewer/JsonViewer.js +9 -3
  11. package/dist/atomic/ActionButton/index.js +2 -2
  12. package/dist/atomic/ActionButton/useAction.d.ts.map +1 -1
  13. package/dist/atomic/ActionButton/useAction.js +18 -5
  14. package/dist/atomic/Alert/index.d.ts +1 -1
  15. package/dist/atomic/Alert/index.d.ts.map +1 -1
  16. package/dist/atomic/Alert/index.js +1 -1
  17. package/dist/atomic/Badge/index.d.ts +1 -1
  18. package/dist/atomic/Button/index.d.ts +2 -2
  19. package/dist/atomic/Button/index.d.ts.map +1 -1
  20. package/dist/atomic/CallToAction/index.d.ts +2 -1
  21. package/dist/atomic/CallToAction/index.d.ts.map +1 -1
  22. package/dist/atomic/CallToAction/index.js +2 -1
  23. package/dist/atomic/Combobox/index.d.ts.map +1 -1
  24. package/dist/atomic/Combobox/index.js +3 -3
  25. package/dist/atomic/CopyToClipboard/index.d.ts.map +1 -1
  26. package/dist/atomic/CopyToClipboard/index.js +20 -4
  27. package/dist/atomic/Dialog/index.js +1 -1
  28. package/dist/atomic/DropdownMenu/DropdownMenuPrimitive.d.ts.map +1 -1
  29. package/dist/atomic/DropdownMenu/DropdownMenuPrimitive.js +5 -21
  30. package/dist/atomic/DropdownMenu/index.d.ts.map +1 -1
  31. package/dist/atomic/DropdownMenu/index.js +7 -17
  32. package/dist/atomic/Grid/GridArea.d.ts +2 -2
  33. package/dist/atomic/Grid/GridArea.js +2 -2
  34. package/dist/atomic/Grid/index.d.ts +39 -22
  35. package/dist/atomic/Grid/index.d.ts.map +1 -1
  36. package/dist/atomic/Grid/index.js +56 -27
  37. package/dist/atomic/HeroSection/index.d.ts +3 -0
  38. package/dist/atomic/HeroSection/index.d.ts.map +1 -1
  39. package/dist/atomic/HeroSection/index.js +5 -2
  40. package/dist/atomic/HoverCard/HoverCardPrimitive.d.ts.map +1 -1
  41. package/dist/atomic/HoverCard/HoverCardPrimitive.js +1 -1
  42. package/dist/atomic/HoverCard/index.d.ts +19 -4
  43. package/dist/atomic/HoverCard/index.d.ts.map +1 -1
  44. package/dist/atomic/HoverCard/index.js +24 -5
  45. package/dist/atomic/Icons/Icon.d.ts.map +1 -1
  46. package/dist/atomic/Icons/Icon.js +11 -10
  47. package/dist/atomic/InfiniteScroll/index.d.ts +4 -2
  48. package/dist/atomic/InfiniteScroll/index.d.ts.map +1 -1
  49. package/dist/atomic/InfiniteScroll/index.js +2 -2
  50. package/dist/atomic/Pagination/index.js +1 -1
  51. package/dist/atomic/Popover/PopoverPrimitive.d.ts +1 -1
  52. package/dist/atomic/Popover/PopoverPrimitive.d.ts.map +1 -1
  53. package/dist/atomic/Popover/PopoverPrimitive.js +2 -2
  54. package/dist/atomic/Popover/index.d.ts +2 -2
  55. package/dist/atomic/Popover/index.d.ts.map +1 -1
  56. package/dist/atomic/Rating/index.d.ts +1 -1
  57. package/dist/atomic/Rating/index.d.ts.map +1 -1
  58. package/dist/atomic/Section/index.d.ts +9 -6
  59. package/dist/atomic/Section/index.d.ts.map +1 -1
  60. package/dist/atomic/Section/index.js +3 -2
  61. package/dist/atomic/Select/index.d.ts.map +1 -1
  62. package/dist/atomic/Select/index.js +2 -3
  63. package/dist/atomic/Stack/index.d.ts +2 -2
  64. package/dist/atomic/Stack/index.js +2 -2
  65. package/dist/atomic/Stepper/index.d.ts +5 -1
  66. package/dist/atomic/Stepper/index.d.ts.map +1 -1
  67. package/dist/atomic/Stepper/index.js +9 -6
  68. package/dist/atomic/Table/index.d.ts +27 -5
  69. package/dist/atomic/Table/index.d.ts.map +1 -1
  70. package/dist/atomic/Table/index.js +55 -6
  71. package/dist/atomic/Tabs/index.d.ts +1 -1
  72. package/dist/atomic/Tag/index.d.ts +1 -1
  73. package/dist/atomic/Text/index.d.ts +2 -0
  74. package/dist/atomic/Text/index.d.ts.map +1 -1
  75. package/dist/atomic/Text/index.js +2 -1
  76. package/dist/atomic/Toaster/ToastPrimitive.d.ts +1 -1
  77. package/dist/atomic/Toaster/ToastPrimitive.d.ts.map +1 -1
  78. package/dist/atomic/Toaster/ToastPrimitive.js +1 -13
  79. package/dist/atomic/Toggle/index.d.ts +1 -1
  80. package/dist/atomic/index.d.ts +1 -1
  81. package/dist/atomic/index.d.ts.map +1 -1
  82. package/dist/hooks/useToast.d.ts.map +1 -1
  83. package/dist/hooks/useToast.js +18 -3
  84. package/dist/hooks/useViewportVisibility.d.ts.map +1 -1
  85. package/dist/hooks/useViewportVisibility.js +10 -12
  86. package/dist/index.d.ts +0 -1
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +6 -4
  89. package/dist/styles/index.css +259 -96
  90. package/dist/types.d.ts +1 -1
  91. package/dist/utils/constants.d.ts +13 -0
  92. package/dist/utils/constants.d.ts.map +1 -1
  93. package/dist/utils/constants.js +12 -0
  94. package/dist/utils/intersectionObserver.d.ts.map +1 -1
  95. package/dist/utils/intersectionObserver.js +1 -11
  96. package/dist/utils/variants.d.ts +1 -1
  97. package/package.json +3 -3
@@ -113,6 +113,15 @@
113
113
  --popover: var(--card);
114
114
  --popover-foreground: var(--card-foreground);
115
115
 
116
+ /*
117
+ * Root card snapshot — computed once on :root from --card/--card-foreground,
118
+ * then inherited unchanged. Variant blocks (e.g. primary) override --card but
119
+ * never touch these, so data-variant='default' can reset --card back to the
120
+ * root value even when nested inside another variant.
121
+ */
122
+ --card-base: var(--card);
123
+ --card-foreground-base: var(--card-foreground);
124
+
116
125
  /* ===========================
117
126
  BORDER RADIUS - 3 VALUES ONLY
118
127
  =========================== */
@@ -208,6 +217,16 @@
208
217
  -6px 12px 24px -6px var(--shadow-color),
209
218
  -3px 6px 12px -3px var(--shadow-color-light);
210
219
 
220
+ /* Root shadow snapshots — same principle as --card-base (see above) */
221
+ --shadow-md-base: var(--shadow-md);
222
+ --shadow-xl-base: var(--shadow-xl);
223
+
224
+ /* Per-variant shadows — essences override these with different colors/shapes */
225
+ --shadow-primary: var(--shadow-md);
226
+ --shadow-primary-xl: var(--shadow-xl);
227
+ --shadow-secondary: var(--shadow-md);
228
+ --shadow-secondary-xl: var(--shadow-xl);
229
+
211
230
  /* Interactive shadows */
212
231
  --shadow-interactive: 0 0 0 3px
213
232
  color-mix(in oklab, var(--ring) 20%, transparent);
@@ -511,7 +530,6 @@ body {
511
530
  /* Reset and base styles */
512
531
 
513
532
  :root {
514
- font-family: var(--font-sans);
515
533
  -webkit-font-smoothing: antialiased;
516
534
  -moz-osx-font-smoothing: grayscale;
517
535
  text-rendering: optimizeLegibility;
@@ -525,9 +543,10 @@ body {
525
543
  box-sizing: border-box;
526
544
  }
527
545
 
528
- /* Set core body defaults */
546
+ /* Set core body defaults — font-family here so theme tokens on :root cascade cleanly */
529
547
 
530
548
  body {
549
+ font-family: var(--font-family, var(--font-sans));
531
550
  min-height: 100dvh;
532
551
  line-height: var(--line-height);
533
552
  text-rendering: optimizeSpeed;
@@ -602,17 +621,21 @@ h6 {
602
621
  color: var(--foreground);
603
622
  background: transparent;
604
623
  text-wrap: balance; /* Equalize line lengths, prevent orphans */
624
+ text-transform: var(--text-transform-heading, none);
625
+ letter-spacing: var(--letter-spacing-heading, normal);
605
626
  }
606
627
 
607
- h1 {
628
+ :is(h1, h2, h3, h4, h5, h6) {
608
629
  font-family: var(--font-headline);
630
+ }
631
+
632
+ h1 {
609
633
  font-size: var(--font-size-3xl);
610
634
  font-weight: var(--font-weight-bold);
611
635
  letter-spacing: -0.02em;
612
636
  }
613
637
 
614
638
  h2 {
615
- font-family: var(--font-headline);
616
639
  font-size: var(--font-size-2xl);
617
640
  font-weight: var(--font-weight-bold);
618
641
  letter-spacing: -0.01em;
@@ -1043,10 +1066,20 @@ em {
1043
1066
  * - accent: Highlighted/active state (--accent colors, sets context for children)
1044
1067
  * - destructive: Error/danger state (--destructive colors)
1045
1068
  *
1046
- * Variants only override --card and --card-foreground.
1069
+ * Variants override --card and --card-foreground.
1070
+ * Primary/secondary also override --shadow-md/--shadow-xl for per-variant shadows.
1071
+ * Default resets --card from --card-base (root snapshot) so nested default cards
1072
+ * inside other variants get the root card color, not the parent's.
1047
1073
  * Surface glow gradient is computed from --theme-is-dark flag and not affected by variants.
1048
1074
  */
1049
1075
 
1076
+ .dndev-surface[data-variant='default'] {
1077
+ --card: var(--card-base);
1078
+ --card-foreground: var(--card-foreground-base);
1079
+ --shadow-md: var(--shadow-md-base);
1080
+ --shadow-xl: var(--shadow-xl-base);
1081
+ }
1082
+
1050
1083
  .dndev-surface[data-variant='muted'] {
1051
1084
  --card: var(--muted);
1052
1085
  --card-foreground: var(--muted-foreground);
@@ -1056,12 +1089,16 @@ em {
1056
1089
  .dndev-surface[data-variant='primary'] {
1057
1090
  --card: var(--primary);
1058
1091
  --card-foreground: var(--primary-foreground);
1092
+ --shadow-md: var(--shadow-primary);
1093
+ --shadow-xl: var(--shadow-primary-xl);
1059
1094
  border-color: var(--primary);
1060
1095
  }
1061
1096
 
1062
1097
  .dndev-surface[data-variant='secondary'] {
1063
1098
  --card: var(--secondary);
1064
1099
  --card-foreground: var(--secondary-foreground);
1100
+ --shadow-md: var(--shadow-secondary);
1101
+ --shadow-xl: var(--shadow-secondary-xl);
1065
1102
  border-color: var(--secondary);
1066
1103
  }
1067
1104
 
@@ -1343,6 +1380,7 @@ em {
1343
1380
  border-radius: var(--radius-interactive);
1344
1381
  font-size: var(--font-size-base);
1345
1382
  font-weight: var(--font-weight-medium);
1383
+ text-transform: var(--text-transform-button, none);
1346
1384
  transition: var(--transition-fast);
1347
1385
  cursor: pointer;
1348
1386
  border: var(--border-hairline) solid transparent;
@@ -1633,6 +1671,7 @@ em {
1633
1671
  overflow: hidden;
1634
1672
  text-overflow: ellipsis;
1635
1673
  white-space: nowrap;
1674
+ text-transform: var(--text-transform-label, none);
1636
1675
  }
1637
1676
 
1638
1677
  /* Compact mode - always hide label */
@@ -1698,7 +1737,8 @@ em {
1698
1737
 
1699
1738
  .dndev-control[data-state='checked'],.dndev-control[data-state='on'],.dndev-control[data-pressed='true'] {
1700
1739
  background-color: var(--control-border);
1701
- color: var(--background);
1740
+ /* --card not --background: inverted text must be opaque (--background can be transparent in some themes) */
1741
+ color: var(--card);
1702
1742
  }
1703
1743
 
1704
1744
  /* CONTROL GROUP - Shared pattern for grouped controls (RadioGroup, Checkbox groups) */
@@ -2004,7 +2044,7 @@ em {
2004
2044
  height: var(--icon-md);
2005
2045
  border: 2px solid currentColor;
2006
2046
  border-radius: var(--radius-full);
2007
- border-right-color: transparent;
2047
+ border-inline-end-color: transparent;
2008
2048
  animation: spin 1s linear infinite;
2009
2049
  }
2010
2050
 
@@ -2344,7 +2384,6 @@ em {
2344
2384
  flex-shrink: 0;
2345
2385
  overflow: hidden;
2346
2386
  border-radius: var(--radius-full);
2347
- border: 1px solid var(--border);
2348
2387
  }
2349
2388
 
2350
2389
  .dndev-avatar-image {
@@ -2801,8 +2840,7 @@ em {
2801
2840
  .dndev-calendar-nav {
2802
2841
  position: absolute;
2803
2842
  top: 0;
2804
- left: 0;
2805
- right: 0;
2843
+ inset-inline: 0;
2806
2844
  height: var(--touch-target);
2807
2845
  pointer-events: none;
2808
2846
  z-index: 1;
@@ -2832,13 +2870,13 @@ em {
2832
2870
  }
2833
2871
 
2834
2872
  .dndev-calendar-nav-previous {
2835
- left: 0;
2873
+ inset-inline-start: 0;
2836
2874
  border-start-start-radius: 0;
2837
2875
  border-end-start-radius: 0;
2838
2876
  }
2839
2877
 
2840
2878
  .dndev-calendar-nav-next {
2841
- right: 0;
2879
+ inset-inline-end: 0;
2842
2880
  border-start-end-radius: 0;
2843
2881
  border-end-end-radius: 0;
2844
2882
  }
@@ -3084,13 +3122,10 @@ em {
3084
3122
  background: var(--muted);
3085
3123
  }
3086
3124
 
3087
- .dndev-cta[data-tone='elevated'] {
3088
- background: var(--background);
3089
- }
3090
-
3091
3125
  .dndev-cta[data-tone='contrast'] {
3092
3126
  background: var(--foreground);
3093
- color: var(--background);
3127
+ /* --card not --background: inverted text must be opaque (--background can be transparent in some themes) */
3128
+ color: var(--card);
3094
3129
  }
3095
3130
 
3096
3131
  .dndev-cta[data-tone='accent'] {
@@ -3132,7 +3167,7 @@ em {
3132
3167
 
3133
3168
  .dndev-cta-actions {
3134
3169
  display: flex;
3135
- flex-direction: column;
3170
+ flex-direction: row;
3136
3171
  gap: var(--gap-md);
3137
3172
  justify-content: center;
3138
3173
  }
@@ -3145,7 +3180,8 @@ em {
3145
3180
 
3146
3181
  .dndev-cta-actions .dndev-interactive[data-variant='primary'] {
3147
3182
  background: var(--foreground);
3148
- color: var(--background);
3183
+ /* --card not --background: inverted text must be opaque */
3184
+ color: var(--card);
3149
3185
  border-color: var(--foreground);
3150
3186
  }
3151
3187
 
@@ -3163,17 +3199,11 @@ em {
3163
3199
 
3164
3200
  :is(.dndev-cta-actions .dndev-interactive[data-variant='outline']):hover {
3165
3201
  background: var(--foreground);
3166
- color: var(--background);
3202
+ /* --card not --background: inverted text must be opaque */
3203
+ color: var(--card);
3167
3204
  border-color: var(--foreground);
3168
3205
  }
3169
3206
 
3170
- @media (width >= 768px) {
3171
-
3172
- .dndev-cta-actions {
3173
- flex-direction: row;
3174
- }
3175
- }
3176
-
3177
3207
  /* packages/components/src/atomic/Card/Card.css */
3178
3208
 
3179
3209
  /* Card layout - grid with gap */
@@ -3385,7 +3415,7 @@ em {
3385
3415
  justify-content: space-between;
3386
3416
  align-items: center;
3387
3417
  width: 100%;
3388
- text-align: left;
3418
+ text-align: start;
3389
3419
  }
3390
3420
 
3391
3421
  .dndev-combobox-trigger button {
@@ -3623,12 +3653,10 @@ em {
3623
3653
  /* Code-specific overrides: background color, text color, and layout */
3624
3654
  display: flex;
3625
3655
  flex-direction: column;
3626
- background: var(
3627
- --muted
3628
- ); /* Override surface gradient with code-specific dark background */
3629
- color: var(
3630
- --muted-foreground
3631
- ); /* Override surface text color for dark background */
3656
+ background: var(--muted);
3657
+ /* Override surface gradient with code-specific dark background */
3658
+ color: var(--muted-foreground);
3659
+ /* Override surface text color for dark background */
3632
3660
  overflow: hidden;
3633
3661
  font-family: var(--font-mono);
3634
3662
  font-size: var(--font-size-sm);
@@ -3702,8 +3730,6 @@ em {
3702
3730
  white-space: pre;
3703
3731
  overflow-x: auto;
3704
3732
  overflow-y: visible;
3705
- min-width: -moz-min-content;
3706
- min-width: min-content;
3707
3733
  }
3708
3734
 
3709
3735
  .dndev-code-pre[data-compact='true'] {
@@ -3720,16 +3746,20 @@ em {
3720
3746
  user-select: none;
3721
3747
  padding-inline-end: var(--gap-md);
3722
3748
  text-align: end;
3723
- font-size: inherit; /* Match parent code font-size */
3749
+ font-size: inherit;
3750
+ /* Match parent code font-size */
3724
3751
  opacity: var(--opacity-muted);
3725
3752
  width: 3rem;
3726
3753
  flex-shrink: 0;
3727
3754
  color: var(--muted-foreground);
3728
- line-height: 1.5; /* Consistent line height */
3755
+ line-height: 1.5;
3756
+ /* Consistent line height */
3729
3757
  }
3730
3758
 
3731
3759
  .dndev-code-line-number {
3732
- line-height: inherit; /* Inherit from parent */
3760
+ line-height: 1.5;
3761
+ min-height: 1.5em;
3762
+ font-size: inherit;
3733
3763
  }
3734
3764
 
3735
3765
  .dndev-code-code {
@@ -3737,8 +3767,10 @@ em {
3737
3767
  min-width: 0;
3738
3768
  text-align: start;
3739
3769
  display: block;
3740
- line-height: 1.5; /* Match line numbers */
3741
- font-size: var(--font-size-sm); /* Explicit match with line numbers */
3770
+ line-height: 1.5;
3771
+ /* Match line numbers */
3772
+ font-size: var(--font-size-sm);
3773
+ /* Explicit match with line numbers */
3742
3774
  }
3743
3775
 
3744
3776
  /* Ensure shiki-generated code respects line-height AND font-size */
@@ -3746,7 +3778,22 @@ em {
3746
3778
  .dndev-code-code pre,
3747
3779
  .dndev-code-code code {
3748
3780
  line-height: inherit;
3749
- font-size: inherit; /* Match parent font-size */
3781
+ font-size: inherit;
3782
+ }
3783
+
3784
+ /* Shiki wraps each line in <span class="line"> — force consistent sizing */
3785
+
3786
+ .dndev-code-code .line {
3787
+ display: block;
3788
+ line-height: 1.5;
3789
+ font-size: inherit;
3790
+ min-height: 1.5em;
3791
+ }
3792
+
3793
+ /* Empty Shiki lines still need height to stay in sync with line numbers */
3794
+
3795
+ .dndev-code-code .line:empty::after {
3796
+ content: '\00a0';
3750
3797
  }
3751
3798
 
3752
3799
  /* packages/components/src/atomic/Command/Command.css */
@@ -3910,7 +3957,7 @@ em {
3910
3957
  order: 3;
3911
3958
  font-size: var(--font-size-xs);
3912
3959
  color: var(--muted-foreground);
3913
- padding-left: calc(var(--icon-md) + var(--gap-sm));
3960
+ padding-inline-start: calc(var(--icon-md) + var(--gap-sm));
3914
3961
  }
3915
3962
 
3916
3963
  .dndev-command-favorite-button {
@@ -4196,6 +4243,54 @@ em {
4196
4243
  }
4197
4244
  }
4198
4245
 
4246
+ /* Responsive templateColumns via custom properties */
4247
+
4248
+ .dndev-grid-component[data-responsive-tpl='true'] {
4249
+ grid-template-columns: var(--grid-tpl-mobile);
4250
+ }
4251
+
4252
+ @media (min-width: 768px) {
4253
+ .dndev-grid-component[data-responsive-tpl='true'] {
4254
+ grid-template-columns: var(--grid-tpl-tablet);
4255
+ }
4256
+ }
4257
+
4258
+ @media (min-width: 1024px) {
4259
+ .dndev-grid-component[data-responsive-tpl='true'] {
4260
+ grid-template-columns: var(--grid-tpl-laptop);
4261
+ }
4262
+ }
4263
+
4264
+ @media (min-width: 1440px) {
4265
+ .dndev-grid-component[data-responsive-tpl='true'] {
4266
+ grid-template-columns: var(--grid-tpl-desktop);
4267
+ }
4268
+ }
4269
+
4270
+ /* Responsive grid areas via custom properties */
4271
+
4272
+ .dndev-grid-component[data-responsive-areas='true'] {
4273
+ grid-template-areas: var(--grid-areas-mobile);
4274
+ }
4275
+
4276
+ @media (min-width: 768px) {
4277
+ .dndev-grid-component[data-responsive-areas='true'] {
4278
+ grid-template-areas: var(--grid-areas-tablet);
4279
+ }
4280
+ }
4281
+
4282
+ @media (min-width: 1024px) {
4283
+ .dndev-grid-component[data-responsive-areas='true'] {
4284
+ grid-template-areas: var(--grid-areas-laptop);
4285
+ }
4286
+ }
4287
+
4288
+ @media (min-width: 1440px) {
4289
+ .dndev-grid-component[data-responsive-areas='true'] {
4290
+ grid-template-areas: var(--grid-areas-desktop);
4291
+ }
4292
+ }
4293
+
4199
4294
  /* Spacing from CSS variables */
4200
4295
 
4201
4296
  .dndev-grid-component[data-gap='none'] {
@@ -4509,7 +4604,8 @@ em {
4509
4604
  height: 44px;
4510
4605
  border: none;
4511
4606
  border-radius: var(--radius-full);
4512
- background-color: var(--background);
4607
+ /* --card not --background: surface must be opaque */
4608
+ background-color: var(--card);
4513
4609
  color: var(--foreground);
4514
4610
  cursor: pointer;
4515
4611
  opacity: 0;
@@ -5076,7 +5172,7 @@ input[type='number'] {
5076
5172
  }
5077
5173
 
5078
5174
  .dndev-nav-menu-content {
5079
- left: 0;
5175
+ inset-inline-start: 0;
5080
5176
  top: 0;
5081
5177
  width: 100%;
5082
5178
  }
@@ -5091,7 +5187,7 @@ input[type='number'] {
5091
5187
 
5092
5188
  .dndev-nav-menu-viewport-wrapper {
5093
5189
  position: absolute;
5094
- left: 0;
5190
+ inset-inline-start: 0;
5095
5191
  top: 100%;
5096
5192
  display: flex;
5097
5193
  justify-content: center;
@@ -5131,7 +5227,7 @@ input[type='number'] {
5131
5227
  height: var(--gap-sm);
5132
5228
  width: var(--gap-sm);
5133
5229
  transform: rotate(45deg);
5134
- border-top-left-radius: 2px;
5230
+ border-start-start-radius: 2px;
5135
5231
  background-color: var(--border);
5136
5232
  box-shadow: var(--shadow-md);
5137
5233
  }
@@ -5302,19 +5398,34 @@ input[type='number'] {
5302
5398
  }
5303
5399
 
5304
5400
  .dndev-pagination-size-label {
5305
- margin-right: var(--gap-sm);
5401
+ margin-inline-end: var(--gap-sm);
5306
5402
  }
5307
5403
 
5308
5404
  .dndev-pagination-nav {
5309
5405
  justify-content: flex-end;
5310
5406
  width: auto;
5311
- margin-left: auto;
5312
- /* Push to right */
5407
+ margin-inline-start: auto;
5408
+ /* Push to end */
5313
5409
  }
5314
5410
  }
5315
5411
 
5316
5412
  /* packages/components/src/atomic/Popover/Popover.css */
5317
5413
 
5414
+ /* Popover content width constraints and wrapping */
5415
+
5416
+ /* Targets Radix UI PopoverContent element */
5417
+
5418
+ [data-radix-popover-content],
5419
+ .dndev-floating[data-radix-popover-content] {
5420
+ max-width: min(90vw, 400px);
5421
+ width: -moz-max-content;
5422
+ width: max-content;
5423
+ min-width: 0;
5424
+ word-wrap: break-word;
5425
+ overflow-wrap: break-word;
5426
+ white-space: normal;
5427
+ }
5428
+
5318
5429
  /* packages/components/src/atomic/Progress/Progress.css */
5319
5430
 
5320
5431
  .dndev-progress {
@@ -5659,9 +5770,10 @@ input[type='number'] {
5659
5770
  /* Content wrapper: constrained + centered + padded */
5660
5771
 
5661
5772
  .dndev-section-content {
5662
- /* Respects PageContainer's --content-width */
5773
+ /* Respects PageContainer's --content-width (passed through breakthrough root) */
5663
5774
  max-width: var(--content-width);
5664
5775
  margin-inline: auto;
5776
+ min-width: 0; /* Allow shrinking so max-width wins when content would force wider */
5665
5777
  /* Padding with section background - responsive to match PageContainer */
5666
5778
  padding-inline: var(--gap-md);
5667
5779
  padding-top: var(--gap-lg);
@@ -5909,6 +6021,9 @@ input[type='number'] {
5909
6021
 
5910
6022
  /* Sheet positioning by side - SPATIAL METAPHOR */
5911
6023
 
6024
+ /* Physical properties intentional: Sheet anchors to viewport edges regardless of text direction.
6025
+ Logical inset-inline would incorrectly swap sides in RTL for left/right sheet variants. */
6026
+
5912
6027
  /* RIGHT / LEFT (Desktop Panels) */
5913
6028
 
5914
6029
  .dndev-sheet-content[data-side='right'],.dndev-sheet-content[data-side='left'] {
@@ -5949,8 +6064,7 @@ input[type='number'] {
5949
6064
  max-height: 92dvh;
5950
6065
  /* Never touch top edge */
5951
6066
  width: 100%;
5952
- margin-left: auto;
5953
- margin-right: auto;
6067
+ margin-inline: auto;
5954
6068
 
5955
6069
  /* On larger screens, constrain width */
5956
6070
  }
@@ -5969,16 +6083,16 @@ input[type='number'] {
5969
6083
  top: 0;
5970
6084
  border-bottom: var(--border-hairline) solid var(--line-1);
5971
6085
  /* Rounded bottom corners only */
5972
- border-bottom-left-radius: var(--radius-lg);
5973
- border-bottom-right-radius: var(--radius-lg);
6086
+ border-end-start-radius: var(--radius-lg);
6087
+ border-end-end-radius: var(--radius-lg);
5974
6088
  }
5975
6089
 
5976
6090
  .dndev-sheet-content[data-side='bottom'] {
5977
6091
  bottom: 0;
5978
6092
  border-top: var(--border-hairline) solid var(--line-1);
5979
6093
  /* Rounded top corners only */
5980
- border-top-left-radius: var(--radius-lg);
5981
- border-top-right-radius: var(--radius-lg);
6094
+ border-start-start-radius: var(--radius-lg);
6095
+ border-start-end-radius: var(--radius-lg);
5982
6096
  }
5983
6097
 
5984
6098
  /* DRAG HANDLE PILL - Visual affordance for draggable sheets */
@@ -6297,7 +6411,8 @@ input[type='number'] {
6297
6411
  min-width: 1.25rem;
6298
6412
  min-height: 1.25rem;
6299
6413
  border-radius: var(--radius-full);
6300
- background-color: var(--background);
6414
+ /* --card not --background: surface must be opaque (--background can be transparent in some themes) */
6415
+ background-color: var(--card);
6301
6416
  border: 2px solid var(--primary);
6302
6417
  box-shadow: var(--shadow-md);
6303
6418
  transition: all var(--dur-fast) var(--ease-in-out);
@@ -6368,7 +6483,8 @@ input[type='number'] {
6368
6483
  font-size: var(--font-size-xs);
6369
6484
  font-weight: var(--font-weight-medium);
6370
6485
  color: var(--foreground);
6371
- background-color: var(--background);
6486
+ /* --card not --background: surface must be opaque */
6487
+ background-color: var(--card);
6372
6488
  padding: 0.125rem 0.375rem;
6373
6489
  border-radius: var(--radius-interactive);
6374
6490
  box-shadow: var(--shadow-sm);
@@ -6392,7 +6508,7 @@ input[type='number'] {
6392
6508
  height: 1em;
6393
6509
  border: 2px solid transparent;
6394
6510
  border-top-color: var(--primary);
6395
- border-right-color: var(--primary);
6511
+ border-inline-end-color: var(--primary);
6396
6512
  border-radius: 50%;
6397
6513
  animation: spin 0.6s linear infinite;
6398
6514
  display: inline-block;
@@ -6402,42 +6518,42 @@ input[type='number'] {
6402
6518
 
6403
6519
  .dndev-spinner[data-variant='default'] {
6404
6520
  border-top-color: var(--foreground);
6405
- border-right-color: var(--foreground);
6521
+ border-inline-end-color: var(--foreground);
6406
6522
  }
6407
6523
 
6408
6524
  .dndev-spinner[data-variant='muted'] {
6409
6525
  border-top-color: var(--muted-foreground);
6410
- border-right-color: var(--muted-foreground);
6526
+ border-inline-end-color: var(--muted-foreground);
6411
6527
  }
6412
6528
 
6413
6529
  .dndev-spinner[data-variant='primary'] {
6414
6530
  border-top-color: var(--primary);
6415
- border-right-color: var(--primary);
6531
+ border-inline-end-color: var(--primary);
6416
6532
  }
6417
6533
 
6418
6534
  .dndev-spinner[data-variant='secondary'] {
6419
6535
  border-top-color: var(--secondary);
6420
- border-right-color: var(--secondary);
6536
+ border-inline-end-color: var(--secondary);
6421
6537
  }
6422
6538
 
6423
6539
  .dndev-spinner[data-variant='accent'] {
6424
6540
  border-top-color: var(--accent);
6425
- border-right-color: var(--accent);
6541
+ border-inline-end-color: var(--accent);
6426
6542
  }
6427
6543
 
6428
6544
  .dndev-spinner[data-variant='success'] {
6429
6545
  border-top-color: var(--success);
6430
- border-right-color: var(--success);
6546
+ border-inline-end-color: var(--success);
6431
6547
  }
6432
6548
 
6433
6549
  .dndev-spinner[data-variant='warning'] {
6434
6550
  border-top-color: var(--warning);
6435
- border-right-color: var(--warning);
6551
+ border-inline-end-color: var(--warning);
6436
6552
  }
6437
6553
 
6438
6554
  .dndev-spinner[data-variant='destructive'] {
6439
6555
  border-top-color: var(--destructive);
6440
- border-right-color: var(--destructive);
6556
+ border-inline-end-color: var(--destructive);
6441
6557
  }
6442
6558
 
6443
6559
  /* Overlay variant - full-page loading */
@@ -6721,6 +6837,8 @@ input[type='number'] {
6721
6837
  display: flex;
6722
6838
  align-items: center;
6723
6839
  justify-content: space-between;
6840
+ gap: var(--gap-md);
6841
+ margin-top: var(--gap-md);
6724
6842
  }
6725
6843
 
6726
6844
  .dndev-stepper-info {
@@ -7160,19 +7278,20 @@ input[type='number'] {
7160
7278
  word-break: break-word;
7161
7279
  border: var(--border-hairline) solid var(--line-2); /* Show clickable area */
7162
7280
 
7163
- /* Fallback (no variant): inactive = primary, active = foreground/background */
7281
+ /* Fallback (no variant): inactive = primary, active = foreground/card */
7164
7282
  background-color: var(--primary);
7165
7283
  color: var(--primary-foreground);
7166
7284
  }
7167
7285
 
7168
7286
  .dndev-interactive[data-role='tab-trigger'][data-state='active'] {
7169
- background-color: var(--background);
7287
+ /* --card not --background: active tab surface must be opaque (--background can be transparent in some themes) */
7288
+ background-color: var(--card);
7170
7289
  color: var(--foreground);
7171
7290
  box-shadow: var(--shadow-sm);
7172
7291
  border-color: var(--primary);
7173
7292
  }
7174
7293
 
7175
- /* Default/Primary variant: inactive = primary, active = foreground/background */
7294
+ /* Default/Primary variant: inactive = primary, active = foreground/card */
7176
7295
 
7177
7296
  .dndev-interactive[data-role='tab-trigger'][data-variant='default'],.dndev-interactive[data-role='tab-trigger'][data-variant='primary'] {
7178
7297
  background-color: var(--primary);
@@ -7180,13 +7299,14 @@ input[type='number'] {
7180
7299
  }
7181
7300
 
7182
7301
  [data-state='active']:is(.dndev-interactive[data-role='tab-trigger'][data-variant='default'],.dndev-interactive[data-role='tab-trigger'][data-variant='primary']) {
7183
- background-color: var(--background);
7302
+ /* --card not --background: active tab surface must be opaque */
7303
+ background-color: var(--card);
7184
7304
  color: var(--foreground);
7185
7305
  box-shadow: var(--shadow-sm);
7186
7306
  border-color: var(--primary);
7187
7307
  }
7188
7308
 
7189
- /* Secondary variant: inactive = secondary, active = foreground/background */
7309
+ /* Secondary variant: inactive = secondary, active = foreground/card */
7190
7310
 
7191
7311
  .dndev-interactive[data-role='tab-trigger'][data-variant='secondary'] {
7192
7312
  background-color: var(--secondary);
@@ -7194,13 +7314,14 @@ input[type='number'] {
7194
7314
  }
7195
7315
 
7196
7316
  .dndev-interactive[data-role='tab-trigger'][data-variant='secondary'][data-state='active'] {
7197
- background-color: var(--background);
7317
+ /* --card not --background: active tab surface must be opaque */
7318
+ background-color: var(--card);
7198
7319
  color: var(--foreground);
7199
7320
  box-shadow: var(--shadow-sm);
7200
7321
  border-color: var(--secondary);
7201
7322
  }
7202
7323
 
7203
- /* Accent variant: inactive = accent, active = foreground/background */
7324
+ /* Accent variant: inactive = accent, active = foreground/card */
7204
7325
 
7205
7326
  .dndev-interactive[data-role='tab-trigger'][data-variant='accent'] {
7206
7327
  background-color: var(--accent);
@@ -7208,7 +7329,8 @@ input[type='number'] {
7208
7329
  }
7209
7330
 
7210
7331
  .dndev-interactive[data-role='tab-trigger'][data-variant='accent'][data-state='active'] {
7211
- background-color: var(--background);
7332
+ /* --card not --background: active tab surface must be opaque */
7333
+ background-color: var(--card);
7212
7334
  color: var(--foreground);
7213
7335
  box-shadow: var(--shadow-sm);
7214
7336
  border-color: var(--accent);
@@ -7228,7 +7350,7 @@ input[type='number'] {
7228
7350
  border-color: var(--primary);
7229
7351
  }
7230
7352
 
7231
- /* Warning variant: inactive = warning, active = foreground/background */
7353
+ /* Warning variant: inactive = warning, active = foreground/card */
7232
7354
 
7233
7355
  .dndev-interactive[data-role='tab-trigger'][data-variant='warning'] {
7234
7356
  background-color: var(--warning);
@@ -7236,13 +7358,14 @@ input[type='number'] {
7236
7358
  }
7237
7359
 
7238
7360
  .dndev-interactive[data-role='tab-trigger'][data-variant='warning'][data-state='active'] {
7239
- background-color: var(--background);
7361
+ /* --card not --background: active tab surface must be opaque */
7362
+ background-color: var(--card);
7240
7363
  color: var(--foreground);
7241
7364
  box-shadow: var(--shadow-sm);
7242
7365
  border-color: var(--warning);
7243
7366
  }
7244
7367
 
7245
- /* Success variant: inactive = success, active = foreground/background */
7368
+ /* Success variant: inactive = success, active = foreground/card */
7246
7369
 
7247
7370
  .dndev-interactive[data-role='tab-trigger'][data-variant='success'] {
7248
7371
  background-color: var(--success);
@@ -7250,13 +7373,14 @@ input[type='number'] {
7250
7373
  }
7251
7374
 
7252
7375
  .dndev-interactive[data-role='tab-trigger'][data-variant='success'][data-state='active'] {
7253
- background-color: var(--background);
7376
+ /* --card not --background: active tab surface must be opaque */
7377
+ background-color: var(--card);
7254
7378
  color: var(--foreground);
7255
7379
  box-shadow: var(--shadow-sm);
7256
7380
  border-color: var(--success);
7257
7381
  }
7258
7382
 
7259
- /* Destructive variant: inactive = destructive, active = foreground/background */
7383
+ /* Destructive variant: inactive = destructive, active = foreground/card */
7260
7384
 
7261
7385
  .dndev-interactive[data-role='tab-trigger'][data-variant='destructive'] {
7262
7386
  background-color: var(--destructive);
@@ -7264,7 +7388,8 @@ input[type='number'] {
7264
7388
  }
7265
7389
 
7266
7390
  .dndev-interactive[data-role='tab-trigger'][data-variant='destructive'][data-state='active'] {
7267
- background-color: var(--background);
7391
+ /* --card not --background: active tab surface must be opaque */
7392
+ background-color: var(--card);
7268
7393
  color: var(--foreground);
7269
7394
  box-shadow: var(--shadow-sm);
7270
7395
  border-color: var(--destructive);
@@ -7311,7 +7436,7 @@ input[type='number'] {
7311
7436
  align-items: center;
7312
7437
  justify-content: center;
7313
7438
  padding: 0;
7314
- margin-left: 2px;
7439
+ margin-inline-start: 2px;
7315
7440
  background: transparent;
7316
7441
  border: none;
7317
7442
  cursor: pointer;
@@ -7474,7 +7599,11 @@ input[type='number'] {
7474
7599
  border-radius: var(--radius-interactive);
7475
7600
  }
7476
7601
 
7477
- /* Level overrides */
7602
+ /* Level overrides — headline font for all heading levels */
7603
+
7604
+ .dndev-text-base[data-level^='h'] {
7605
+ font-family: var(--font-headline);
7606
+ }
7478
7607
 
7479
7608
  .dndev-text-base[data-level='h1'] {
7480
7609
  font-size: var(--font-size-3xl);
@@ -7527,6 +7656,10 @@ input[type='number'] {
7527
7656
  font-weight: var(--font-weight-bold);
7528
7657
  }
7529
7658
 
7659
+ .dndev-text-base[data-italic] {
7660
+ font-style: italic;
7661
+ }
7662
+
7530
7663
  /* packages/components/src/atomic/Toaster/Toaster.css */
7531
7664
 
7532
7665
  .dndev-toast-viewport {
@@ -7726,8 +7859,9 @@ input[type='number'] {
7726
7859
 
7727
7860
  .dndev-toggle-group {
7728
7861
  display: inline-flex;
7862
+ flex-wrap: wrap;
7729
7863
  align-items: center;
7730
- gap: 0;
7864
+ gap: var(--gap-sm);
7731
7865
  padding: 0.125rem;
7732
7866
  border-radius: var(--radius-interactive);
7733
7867
  background-color: var(--muted);
@@ -7819,7 +7953,8 @@ input[type='number'] {
7819
7953
  z-index: var(--z-tooltip);
7820
7954
  /* Inverted colors for high contrast - industry standard (Vercel, GitHub, Stripe) */
7821
7955
  background: var(--foreground);
7822
- color: var(--background);
7956
+ /* --card not --background: inverted text must be opaque (--background can be transparent in some themes) */
7957
+ color: var(--card);
7823
7958
  box-shadow: var(--shadow-lg); /* Stronger shadow for visibility */
7824
7959
  padding: 0.375rem 0.5rem; /* 6px 8px - industry standard */
7825
7960
  font-size: var(--font-size-xs); /* 12px */
@@ -7923,12 +8058,16 @@ input[type='number'] {
7923
8058
 
7924
8059
  .dndev-video-dialog {
7925
8060
  max-width: 90vw;
7926
- max-height: 90vh;
7927
8061
  }
7928
8062
 
7929
8063
  .dndev-video-dialog .dndev-modal-body {
7930
8064
  padding: 0;
8065
+ overflow: hidden;
8066
+ }
8067
+
8068
+ .dndev-video-dialog .dndev-video-frame {
7931
8069
  aspect-ratio: 16/9;
8070
+ max-height: calc(90vh - 5rem);
7932
8071
  }
7933
8072
 
7934
8073
  /* 6. Animation keyframes */
@@ -8455,6 +8594,12 @@ input[type='number'] {
8455
8594
 
8456
8595
  /* Tone backgrounds - apply directly to section element (like CallToAction) */
8457
8596
 
8597
+ /* Ghost (default) - transparent, allows background images to show through */
8598
+
8599
+ .dndev-section-full-width[data-tone='ghost'],.dndev-section-full-width:not([data-tone]) {
8600
+ background: transparent;
8601
+ }
8602
+
8458
8603
  .dndev-section-full-width[data-tone='base'] {
8459
8604
  background: var(--background);
8460
8605
  }
@@ -8463,16 +8608,37 @@ input[type='number'] {
8463
8608
  background: var(--muted);
8464
8609
  }
8465
8610
 
8466
- .dndev-section-full-width[data-tone='elevated'] {
8611
+ .dndev-section-full-width[data-tone='contrast'] {
8467
8612
  background: var(--background);
8613
+ color: var(--foreground);
8468
8614
  }
8469
8615
 
8470
- .dndev-section-full-width[data-tone='contrast'] {
8616
+ .dndev-section-full-width[data-tone='accent'] {
8617
+ background: color-mix(in oklab, var(--accent) 5%, transparent);
8618
+ }
8619
+
8620
+ /* HeroSection tone backgrounds - same system as Section/CallToAction */
8621
+
8622
+ /* Ghost (default) - transparent, allows background images to show through */
8623
+
8624
+ .dndev-hero-section[data-tone='ghost'],.dndev-hero-section:not([data-tone]) {
8625
+ background: transparent;
8626
+ }
8627
+
8628
+ .dndev-hero-section[data-tone='base'] {
8629
+ background: var(--background);
8630
+ }
8631
+
8632
+ .dndev-hero-section[data-tone='muted'] {
8633
+ background: var(--muted);
8634
+ }
8635
+
8636
+ .dndev-hero-section[data-tone='contrast'] {
8471
8637
  background: var(--background);
8472
8638
  color: var(--foreground);
8473
8639
  }
8474
8640
 
8475
- .dndev-section-full-width[data-tone='accent'] {
8641
+ .dndev-hero-section[data-tone='accent'] {
8476
8642
  background: color-mix(in oklab, var(--accent) 5%, transparent);
8477
8643
  }
8478
8644
 
@@ -8685,10 +8851,7 @@ h4[data-variant='code'] {
8685
8851
  }
8686
8852
 
8687
8853
  .dndev-inset-0 {
8688
- top: 0;
8689
- right: 0;
8690
- bottom: 0;
8691
- left: 0;
8854
+ inset: 0;
8692
8855
  }
8693
8856
 
8694
8857
  .dndev-inset-y-0 {
@@ -8696,8 +8859,8 @@ h4[data-variant='code'] {
8696
8859
  bottom: 0;
8697
8860
  }
8698
8861
 
8699
- .dndev-left-0 {
8700
- left: 0;
8862
+ .dndev-inset-inline-start-0 {
8863
+ inset-inline-start: 0;
8701
8864
  }
8702
8865
 
8703
8866
  .dndev-min-h-0 {