@donotdev/ui 0.0.13 → 0.0.14

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 (147) hide show
  1. package/dist/components/auth/AuthMenu.d.ts.map +1 -1
  2. package/dist/components/auth/AuthMenu.js +19 -20
  3. package/dist/components/common/FeatureCard.d.ts +3 -1
  4. package/dist/components/common/FeatureCard.d.ts.map +1 -1
  5. package/dist/components/common/FeatureCard.js +2 -2
  6. package/dist/components/common/ProgressBar.js +2 -2
  7. package/dist/components/common/TechBento.d.ts +14 -2
  8. package/dist/components/common/TechBento.d.ts.map +1 -1
  9. package/dist/components/common/TechBento.js +8 -9
  10. package/dist/components/cookie-consent/CookieConsent.d.ts.map +1 -1
  11. package/dist/components/cookie-consent/CookieConsent.js +3 -4
  12. package/dist/components/layout/components/DropdownNavigation.d.ts.map +1 -1
  13. package/dist/components/layout/components/DropdownNavigation.js +3 -12
  14. package/dist/components/layout/components/FloatingLanguageSwitcher.js +1 -1
  15. package/dist/components/layout/components/Notifications.d.ts +1 -3
  16. package/dist/components/layout/components/Notifications.d.ts.map +1 -1
  17. package/dist/components/layout/components/Notifications.js +4 -2
  18. package/dist/components/layout/components/header/AppBranding.d.ts.map +1 -1
  19. package/dist/components/layout/components/header/AppBranding.js +2 -1
  20. package/dist/components/layout/components/header/AppIcon.d.ts.map +1 -1
  21. package/dist/components/layout/components/header/AppIcon.js +5 -2
  22. package/dist/components/layout/components/header/CacheSettings.d.ts.map +1 -1
  23. package/dist/components/layout/components/header/CacheSettings.js +3 -1
  24. package/dist/components/layout/components/header/HeaderNavigation.d.ts +6 -0
  25. package/dist/components/layout/components/header/HeaderNavigation.d.ts.map +1 -1
  26. package/dist/components/layout/components/header/HeaderNavigation.js +12 -2
  27. package/dist/components/license/LicenseWatermark.d.ts.map +1 -1
  28. package/dist/components/license/LicenseWatermark.js +3 -1
  29. package/dist/crud/components/CrudCardLink.d.ts +17 -0
  30. package/dist/crud/components/CrudCardLink.d.ts.map +1 -0
  31. package/dist/crud/components/CrudCardLink.js +17 -0
  32. package/dist/crud/components/EntityCardList.d.ts.map +1 -1
  33. package/dist/crud/components/EntityCardList.js +24 -79
  34. package/dist/crud/components/EntityDisplayRenderer.d.ts +1 -1
  35. package/dist/crud/components/EntityDisplayRenderer.d.ts.map +1 -1
  36. package/dist/crud/components/EntityDisplayRenderer.js +6 -2
  37. package/dist/crud/components/EntityFormRenderer.d.ts +1 -1
  38. package/dist/crud/components/EntityFormRenderer.d.ts.map +1 -1
  39. package/dist/crud/components/EntityFormRenderer.js +29 -18
  40. package/dist/crud/components/EntityList.d.ts +1 -1
  41. package/dist/crud/components/EntityList.d.ts.map +1 -1
  42. package/dist/crud/components/EntityList.js +1 -1
  43. package/dist/crud/components/EntityRecommendations.d.ts +28 -0
  44. package/dist/crud/components/EntityRecommendations.d.ts.map +1 -0
  45. package/dist/crud/components/EntityRecommendations.js +31 -0
  46. package/dist/crud/components/index.d.ts +2 -1
  47. package/dist/crud/components/index.d.ts.map +1 -1
  48. package/dist/crud/components/index.js +1 -0
  49. package/dist/index.js +4 -4
  50. package/dist/internal/common/RouteErrorFallback.d.ts.map +1 -1
  51. package/dist/internal/devtools/components/AuthDebugButton.js +1 -1
  52. package/dist/internal/devtools/components/DesignTab.d.ts.map +1 -1
  53. package/dist/internal/devtools/components/DesignTab.js +3 -2
  54. package/dist/internal/devtools/components/LayoutReset.d.ts.map +1 -1
  55. package/dist/internal/devtools/components/LayoutReset.js +2 -0
  56. package/dist/internal/devtools/components/StoresTab.d.ts.map +1 -1
  57. package/dist/internal/devtools/components/StoresTab.js +3 -0
  58. package/dist/internal/devtools/utils/envVarDiscovery.d.ts +1 -0
  59. package/dist/internal/devtools/utils/envVarDiscovery.d.ts.map +1 -1
  60. package/dist/internal/devtools/utils/envVarDiscovery.js +5 -0
  61. package/dist/internal/devtools/utils/virtualModuleInspector.d.ts.map +1 -1
  62. package/dist/internal/devtools/utils/virtualModuleInspector.js +27 -21
  63. package/dist/internal/initializers/BaseStoresInitializer.d.ts.map +1 -1
  64. package/dist/internal/initializers/BaseStoresInitializer.js +30 -6
  65. package/dist/internal/layout/components/AutoMetaTags.d.ts.map +1 -1
  66. package/dist/internal/layout/components/AutoMetaTags.js +10 -8
  67. package/dist/internal/layout/components/FontPreloadLinks.d.ts +16 -0
  68. package/dist/internal/layout/components/FontPreloadLinks.d.ts.map +1 -0
  69. package/dist/internal/layout/components/FontPreloadLinks.js +32 -0
  70. package/dist/internal/layout/components/PerformanceHints.d.ts +7 -12
  71. package/dist/internal/layout/components/PerformanceHints.d.ts.map +1 -1
  72. package/dist/internal/layout/components/PerformanceHints.js +8 -12
  73. package/dist/internal/layout/components/footer/useLegalLinks.d.ts +6 -5
  74. package/dist/internal/layout/components/footer/useLegalLinks.d.ts.map +1 -1
  75. package/dist/internal/layout/components/footer/useLegalLinks.js +6 -2
  76. package/dist/internal/layout/zones/DnDevFooter.d.ts +6 -0
  77. package/dist/internal/layout/zones/DnDevFooter.d.ts.map +1 -1
  78. package/dist/internal/layout/zones/DnDevFooter.js +10 -4
  79. package/dist/internal/layout/zones/DnDevHeader.d.ts +7 -0
  80. package/dist/internal/layout/zones/DnDevHeader.d.ts.map +1 -1
  81. package/dist/internal/layout/zones/DnDevHeader.js +7 -0
  82. package/dist/internal/layout/zones/DnDevMergedBar.d.ts +7 -0
  83. package/dist/internal/layout/zones/DnDevMergedBar.d.ts.map +1 -1
  84. package/dist/internal/layout/zones/DnDevMergedBar.js +9 -0
  85. package/dist/internal/layout/zones/DnDevSidebar.d.ts +4 -0
  86. package/dist/internal/layout/zones/DnDevSidebar.d.ts.map +1 -1
  87. package/dist/internal/layout/zones/DnDevSidebar.js +13 -1
  88. package/dist/next.d.ts +1 -0
  89. package/dist/next.d.ts.map +1 -1
  90. package/dist/next.js +1 -0
  91. package/dist/routing/AuthGuard.d.ts +1 -1
  92. package/dist/routing/AuthGuard.d.ts.map +1 -1
  93. package/dist/routing/AuthGuard.js +3 -1
  94. package/dist/routing/GoTo.d.ts.map +1 -1
  95. package/dist/routing/GoTo.js +3 -1
  96. package/dist/routing/GoToDialog.d.ts.map +1 -1
  97. package/dist/routing/GoToDialog.js +2 -7
  98. package/dist/routing/GoToInput.d.ts +0 -3
  99. package/dist/routing/GoToInput.d.ts.map +1 -1
  100. package/dist/routing/GoToInput.js +4 -2
  101. package/dist/routing/Link.js +1 -1
  102. package/dist/routing/NavigationItem.d.ts +29 -7
  103. package/dist/routing/NavigationItem.d.ts.map +1 -1
  104. package/dist/routing/NavigationItem.js +22 -6
  105. package/dist/routing/hooks/hooks.next.js +1 -1
  106. package/dist/routing/hooks/hooks.vite.js +1 -1
  107. package/dist/routing/hooks/useRedirectGuard.next.d.ts.map +1 -1
  108. package/dist/routing/hooks/useRedirectGuard.next.js +9 -8
  109. package/dist/routing/hooks/useRedirectGuard.vite.d.ts.map +1 -1
  110. package/dist/routing/hooks/useRedirectGuard.vite.js +9 -8
  111. package/dist/routing/hooks/useSearchParams.next.d.ts +18 -1
  112. package/dist/routing/hooks/useSearchParams.next.d.ts.map +1 -1
  113. package/dist/routing/hooks/useSearchParams.next.js +16 -0
  114. package/dist/routing/hooks/useSearchParams.vite.d.ts +16 -0
  115. package/dist/routing/hooks/useSearchParams.vite.d.ts.map +1 -1
  116. package/dist/routing/hooks/useSearchParams.vite.js +17 -1
  117. package/dist/routing/index.d.ts.map +1 -1
  118. package/dist/routing/index.js +2 -0
  119. package/dist/routing/useNavigation.d.ts +30 -0
  120. package/dist/routing/useNavigation.d.ts.map +1 -1
  121. package/dist/routing/useNavigation.js +40 -3
  122. package/dist/routing/useRouteDiscovery.d.ts +2 -2
  123. package/dist/routing/useRouteDiscovery.d.ts.map +1 -1
  124. package/dist/routing/useRouteDiscovery.js +10 -4
  125. package/dist/styles/index.css +268 -82
  126. package/dist/utils/index.d.ts +1 -0
  127. package/dist/utils/index.d.ts.map +1 -1
  128. package/dist/utils/index.js +1 -0
  129. package/dist/utils/sanitizeSvg.d.ts +13 -0
  130. package/dist/utils/sanitizeSvg.d.ts.map +1 -0
  131. package/dist/utils/sanitizeSvg.js +47 -0
  132. package/dist/utils/useBillingVisibility.d.ts.map +1 -1
  133. package/dist/utils/useBillingVisibility.js +0 -7
  134. package/dist/utils/useCrudSafe.d.ts +0 -2
  135. package/dist/utils/useCrudSafe.d.ts.map +1 -1
  136. package/dist/utils/useFormStoreSafe.d.ts +3 -1
  137. package/dist/utils/useFormStoreSafe.d.ts.map +1 -1
  138. package/dist/utils/useFormStoreSafe.js +4 -5
  139. package/dist/vite-routing/AppRoutes.d.ts +19 -8
  140. package/dist/vite-routing/AppRoutes.d.ts.map +1 -1
  141. package/dist/vite-routing/AppRoutes.js +0 -3
  142. package/package.json +15 -11
  143. package/assets/fonts/fonts.css +0 -206
  144. package/dist/dndev.css +0 -10733
  145. package/dist/routing/Navigate.d.ts +0 -10
  146. package/dist/routing/Navigate.d.ts.map +0 -1
  147. package/dist/routing/Navigate.js +0 -10
@@ -121,6 +121,15 @@
121
121
  --popover: var(--card);
122
122
  --popover-foreground: var(--card-foreground);
123
123
 
124
+ /*
125
+ * Root card snapshot — computed once on :root from --card/--card-foreground,
126
+ * then inherited unchanged. Variant blocks (e.g. primary) override --card but
127
+ * never touch these, so data-variant='default' can reset --card back to the
128
+ * root value even when nested inside another variant.
129
+ */
130
+ --card-base: var(--card);
131
+ --card-foreground-base: var(--card-foreground);
132
+
124
133
  /* ===========================
125
134
  BORDER RADIUS - 3 VALUES ONLY
126
135
  =========================== */
@@ -216,6 +225,16 @@
216
225
  -6px 12px 24px -6px var(--shadow-color),
217
226
  -3px 6px 12px -3px var(--shadow-color-light);
218
227
 
228
+ /* Root shadow snapshots — same principle as --card-base (see above) */
229
+ --shadow-md-base: var(--shadow-md);
230
+ --shadow-xl-base: var(--shadow-xl);
231
+
232
+ /* Per-variant shadows — essences override these with different colors/shapes */
233
+ --shadow-primary: var(--shadow-md);
234
+ --shadow-primary-xl: var(--shadow-xl);
235
+ --shadow-secondary: var(--shadow-md);
236
+ --shadow-secondary-xl: var(--shadow-xl);
237
+
219
238
  /* Interactive shadows */
220
239
  --shadow-interactive: 0 0 0 3px
221
240
  color-mix(in oklab, var(--ring) 20%, transparent);
@@ -519,7 +538,6 @@ body {
519
538
  /* Reset and base styles */
520
539
 
521
540
  :root {
522
- font-family: var(--font-sans);
523
541
  -webkit-font-smoothing: antialiased;
524
542
  -moz-osx-font-smoothing: grayscale;
525
543
  text-rendering: optimizeLegibility;
@@ -533,9 +551,10 @@ body {
533
551
  box-sizing: border-box;
534
552
  }
535
553
 
536
- /* Set core body defaults */
554
+ /* Set core body defaults — font-family here so theme tokens on :root cascade cleanly */
537
555
 
538
556
  body {
557
+ font-family: var(--font-family, var(--font-sans));
539
558
  min-height: 100dvh;
540
559
  line-height: var(--line-height);
541
560
  text-rendering: optimizeSpeed;
@@ -610,17 +629,21 @@ h6 {
610
629
  color: var(--foreground);
611
630
  background: transparent;
612
631
  text-wrap: balance; /* Equalize line lengths, prevent orphans */
632
+ text-transform: var(--text-transform-heading, none);
633
+ letter-spacing: var(--letter-spacing-heading, normal);
613
634
  }
614
635
 
615
- h1 {
636
+ :is(h1, h2, h3, h4, h5, h6) {
616
637
  font-family: var(--font-headline);
638
+ }
639
+
640
+ h1 {
617
641
  font-size: var(--font-size-3xl);
618
642
  font-weight: var(--font-weight-bold);
619
643
  letter-spacing: -0.02em;
620
644
  }
621
645
 
622
646
  h2 {
623
- font-family: var(--font-headline);
624
647
  font-size: var(--font-size-2xl);
625
648
  font-weight: var(--font-weight-bold);
626
649
  letter-spacing: -0.01em;
@@ -1051,10 +1074,20 @@ em {
1051
1074
  * - accent: Highlighted/active state (--accent colors, sets context for children)
1052
1075
  * - destructive: Error/danger state (--destructive colors)
1053
1076
  *
1054
- * Variants only override --card and --card-foreground.
1077
+ * Variants override --card and --card-foreground.
1078
+ * Primary/secondary also override --shadow-md/--shadow-xl for per-variant shadows.
1079
+ * Default resets --card from --card-base (root snapshot) so nested default cards
1080
+ * inside other variants get the root card color, not the parent's.
1055
1081
  * Surface glow gradient is computed from --theme-is-dark flag and not affected by variants.
1056
1082
  */
1057
1083
 
1084
+ .dndev-surface[data-variant='default'] {
1085
+ --card: var(--card-base);
1086
+ --card-foreground: var(--card-foreground-base);
1087
+ --shadow-md: var(--shadow-md-base);
1088
+ --shadow-xl: var(--shadow-xl-base);
1089
+ }
1090
+
1058
1091
  .dndev-surface[data-variant='muted'] {
1059
1092
  --card: var(--muted);
1060
1093
  --card-foreground: var(--muted-foreground);
@@ -1064,12 +1097,16 @@ em {
1064
1097
  .dndev-surface[data-variant='primary'] {
1065
1098
  --card: var(--primary);
1066
1099
  --card-foreground: var(--primary-foreground);
1100
+ --shadow-md: var(--shadow-primary);
1101
+ --shadow-xl: var(--shadow-primary-xl);
1067
1102
  border-color: var(--primary);
1068
1103
  }
1069
1104
 
1070
1105
  .dndev-surface[data-variant='secondary'] {
1071
1106
  --card: var(--secondary);
1072
1107
  --card-foreground: var(--secondary-foreground);
1108
+ --shadow-md: var(--shadow-secondary);
1109
+ --shadow-xl: var(--shadow-secondary-xl);
1073
1110
  border-color: var(--secondary);
1074
1111
  }
1075
1112
 
@@ -1351,6 +1388,7 @@ em {
1351
1388
  border-radius: var(--radius-interactive);
1352
1389
  font-size: var(--font-size-base);
1353
1390
  font-weight: var(--font-weight-medium);
1391
+ text-transform: var(--text-transform-button, none);
1354
1392
  transition: var(--transition-fast);
1355
1393
  cursor: pointer;
1356
1394
  border: var(--border-hairline) solid transparent;
@@ -1641,6 +1679,7 @@ em {
1641
1679
  overflow: hidden;
1642
1680
  text-overflow: ellipsis;
1643
1681
  white-space: nowrap;
1682
+ text-transform: var(--text-transform-label, none);
1644
1683
  }
1645
1684
 
1646
1685
  /* Compact mode - always hide label */
@@ -1706,7 +1745,8 @@ em {
1706
1745
 
1707
1746
  .dndev-control[data-state='checked'],.dndev-control[data-state='on'],.dndev-control[data-pressed='true'] {
1708
1747
  background-color: var(--control-border);
1709
- color: var(--background);
1748
+ /* --card not --background: inverted text must be opaque (--background can be transparent in some themes) */
1749
+ color: var(--card);
1710
1750
  }
1711
1751
 
1712
1752
  /* CONTROL GROUP - Shared pattern for grouped controls (RadioGroup, Checkbox groups) */
@@ -2012,7 +2052,7 @@ em {
2012
2052
  height: var(--icon-md);
2013
2053
  border: 2px solid currentColor;
2014
2054
  border-radius: var(--radius-full);
2015
- border-right-color: transparent;
2055
+ border-inline-end-color: transparent;
2016
2056
  animation: spin 1s linear infinite;
2017
2057
  }
2018
2058
 
@@ -2352,7 +2392,6 @@ em {
2352
2392
  flex-shrink: 0;
2353
2393
  overflow: hidden;
2354
2394
  border-radius: var(--radius-full);
2355
- border: 1px solid var(--border);
2356
2395
  }
2357
2396
 
2358
2397
  .dndev-avatar-image {
@@ -2809,8 +2848,7 @@ em {
2809
2848
  .dndev-calendar-nav {
2810
2849
  position: absolute;
2811
2850
  top: 0;
2812
- left: 0;
2813
- right: 0;
2851
+ inset-inline: 0;
2814
2852
  height: var(--touch-target);
2815
2853
  pointer-events: none;
2816
2854
  z-index: 1;
@@ -2840,13 +2878,13 @@ em {
2840
2878
  }
2841
2879
 
2842
2880
  .dndev-calendar-nav-previous {
2843
- left: 0;
2881
+ inset-inline-start: 0;
2844
2882
  border-start-start-radius: 0;
2845
2883
  border-end-start-radius: 0;
2846
2884
  }
2847
2885
 
2848
2886
  .dndev-calendar-nav-next {
2849
- right: 0;
2887
+ inset-inline-end: 0;
2850
2888
  border-start-end-radius: 0;
2851
2889
  border-end-end-radius: 0;
2852
2890
  }
@@ -3092,13 +3130,10 @@ em {
3092
3130
  background: var(--muted);
3093
3131
  }
3094
3132
 
3095
- .dndev-cta[data-tone='elevated'] {
3096
- background: var(--background);
3097
- }
3098
-
3099
3133
  .dndev-cta[data-tone='contrast'] {
3100
3134
  background: var(--foreground);
3101
- color: var(--background);
3135
+ /* --card not --background: inverted text must be opaque (--background can be transparent in some themes) */
3136
+ color: var(--card);
3102
3137
  }
3103
3138
 
3104
3139
  .dndev-cta[data-tone='accent'] {
@@ -3153,7 +3188,8 @@ em {
3153
3188
 
3154
3189
  .dndev-cta-actions .dndev-interactive[data-variant='primary'] {
3155
3190
  background: var(--foreground);
3156
- color: var(--background);
3191
+ /* --card not --background: inverted text must be opaque */
3192
+ color: var(--card);
3157
3193
  border-color: var(--foreground);
3158
3194
  }
3159
3195
 
@@ -3171,7 +3207,8 @@ em {
3171
3207
 
3172
3208
  :is(.dndev-cta-actions .dndev-interactive[data-variant='outline']):hover {
3173
3209
  background: var(--foreground);
3174
- color: var(--background);
3210
+ /* --card not --background: inverted text must be opaque */
3211
+ color: var(--card);
3175
3212
  border-color: var(--foreground);
3176
3213
  }
3177
3214
 
@@ -3386,7 +3423,7 @@ em {
3386
3423
  justify-content: space-between;
3387
3424
  align-items: center;
3388
3425
  width: 100%;
3389
- text-align: left;
3426
+ text-align: start;
3390
3427
  }
3391
3428
 
3392
3429
  .dndev-combobox-trigger button {
@@ -3728,8 +3765,9 @@ em {
3728
3765
  }
3729
3766
 
3730
3767
  .dndev-code-line-number {
3731
- line-height: inherit;
3732
- /* Inherit from parent */
3768
+ line-height: 1.5;
3769
+ min-height: 1.5em;
3770
+ font-size: inherit;
3733
3771
  }
3734
3772
 
3735
3773
  .dndev-code-code {
@@ -3749,7 +3787,21 @@ em {
3749
3787
  .dndev-code-code code {
3750
3788
  line-height: inherit;
3751
3789
  font-size: inherit;
3752
- /* Match parent font-size */
3790
+ }
3791
+
3792
+ /* Shiki wraps each line in <span class="line"> — force consistent sizing */
3793
+
3794
+ .dndev-code-code .line {
3795
+ display: block;
3796
+ line-height: 1.5;
3797
+ font-size: inherit;
3798
+ min-height: 1.5em;
3799
+ }
3800
+
3801
+ /* Empty Shiki lines still need height to stay in sync with line numbers */
3802
+
3803
+ .dndev-code-code .line:empty::after {
3804
+ content: '\00a0';
3753
3805
  }
3754
3806
 
3755
3807
  /* packages/components/src/atomic/Command/Command.css */
@@ -3913,7 +3965,7 @@ em {
3913
3965
  order: 3;
3914
3966
  font-size: var(--font-size-xs);
3915
3967
  color: var(--muted-foreground);
3916
- padding-left: calc(var(--icon-md) + var(--gap-sm));
3968
+ padding-inline-start: calc(var(--icon-md) + var(--gap-sm));
3917
3969
  }
3918
3970
 
3919
3971
  .dndev-command-favorite-button {
@@ -4199,6 +4251,54 @@ em {
4199
4251
  }
4200
4252
  }
4201
4253
 
4254
+ /* Responsive templateColumns via custom properties */
4255
+
4256
+ .dndev-grid-component[data-responsive-tpl='true'] {
4257
+ grid-template-columns: var(--grid-tpl-mobile);
4258
+ }
4259
+
4260
+ @media (min-width: 768px) {
4261
+ .dndev-grid-component[data-responsive-tpl='true'] {
4262
+ grid-template-columns: var(--grid-tpl-tablet);
4263
+ }
4264
+ }
4265
+
4266
+ @media (min-width: 1024px) {
4267
+ .dndev-grid-component[data-responsive-tpl='true'] {
4268
+ grid-template-columns: var(--grid-tpl-laptop);
4269
+ }
4270
+ }
4271
+
4272
+ @media (min-width: 1440px) {
4273
+ .dndev-grid-component[data-responsive-tpl='true'] {
4274
+ grid-template-columns: var(--grid-tpl-desktop);
4275
+ }
4276
+ }
4277
+
4278
+ /* Responsive grid areas via custom properties */
4279
+
4280
+ .dndev-grid-component[data-responsive-areas='true'] {
4281
+ grid-template-areas: var(--grid-areas-mobile);
4282
+ }
4283
+
4284
+ @media (min-width: 768px) {
4285
+ .dndev-grid-component[data-responsive-areas='true'] {
4286
+ grid-template-areas: var(--grid-areas-tablet);
4287
+ }
4288
+ }
4289
+
4290
+ @media (min-width: 1024px) {
4291
+ .dndev-grid-component[data-responsive-areas='true'] {
4292
+ grid-template-areas: var(--grid-areas-laptop);
4293
+ }
4294
+ }
4295
+
4296
+ @media (min-width: 1440px) {
4297
+ .dndev-grid-component[data-responsive-areas='true'] {
4298
+ grid-template-areas: var(--grid-areas-desktop);
4299
+ }
4300
+ }
4301
+
4202
4302
  /* Spacing from CSS variables */
4203
4303
 
4204
4304
  .dndev-grid-component[data-gap='none'] {
@@ -4512,7 +4612,8 @@ em {
4512
4612
  height: 44px;
4513
4613
  border: none;
4514
4614
  border-radius: var(--radius-full);
4515
- background-color: var(--background);
4615
+ /* --card not --background: surface must be opaque */
4616
+ background-color: var(--card);
4516
4617
  color: var(--foreground);
4517
4618
  cursor: pointer;
4518
4619
  opacity: 0;
@@ -5079,7 +5180,7 @@ input[type='number'] {
5079
5180
  }
5080
5181
 
5081
5182
  .dndev-nav-menu-content {
5082
- left: 0;
5183
+ inset-inline-start: 0;
5083
5184
  top: 0;
5084
5185
  width: 100%;
5085
5186
  }
@@ -5094,7 +5195,7 @@ input[type='number'] {
5094
5195
 
5095
5196
  .dndev-nav-menu-viewport-wrapper {
5096
5197
  position: absolute;
5097
- left: 0;
5198
+ inset-inline-start: 0;
5098
5199
  top: 100%;
5099
5200
  display: flex;
5100
5201
  justify-content: center;
@@ -5134,7 +5235,7 @@ input[type='number'] {
5134
5235
  height: var(--gap-sm);
5135
5236
  width: var(--gap-sm);
5136
5237
  transform: rotate(45deg);
5137
- border-top-left-radius: 2px;
5238
+ border-start-start-radius: 2px;
5138
5239
  background-color: var(--border);
5139
5240
  box-shadow: var(--shadow-md);
5140
5241
  }
@@ -5305,19 +5406,34 @@ input[type='number'] {
5305
5406
  }
5306
5407
 
5307
5408
  .dndev-pagination-size-label {
5308
- margin-right: var(--gap-sm);
5409
+ margin-inline-end: var(--gap-sm);
5309
5410
  }
5310
5411
 
5311
5412
  .dndev-pagination-nav {
5312
5413
  justify-content: flex-end;
5313
5414
  width: auto;
5314
- margin-left: auto;
5315
- /* Push to right */
5415
+ margin-inline-start: auto;
5416
+ /* Push to end */
5316
5417
  }
5317
5418
  }
5318
5419
 
5319
5420
  /* packages/components/src/atomic/Popover/Popover.css */
5320
5421
 
5422
+ /* Popover content width constraints and wrapping */
5423
+
5424
+ /* Targets Radix UI PopoverContent element */
5425
+
5426
+ [data-radix-popover-content],
5427
+ .dndev-floating[data-radix-popover-content] {
5428
+ max-width: min(90vw, 400px);
5429
+ width: -moz-max-content;
5430
+ width: max-content;
5431
+ min-width: 0;
5432
+ word-wrap: break-word;
5433
+ overflow-wrap: break-word;
5434
+ white-space: normal;
5435
+ }
5436
+
5321
5437
  /* packages/components/src/atomic/Progress/Progress.css */
5322
5438
 
5323
5439
  .dndev-progress {
@@ -5662,9 +5778,10 @@ input[type='number'] {
5662
5778
  /* Content wrapper: constrained + centered + padded */
5663
5779
 
5664
5780
  .dndev-section-content {
5665
- /* Respects PageContainer's --content-width */
5781
+ /* Respects PageContainer's --content-width (passed through breakthrough root) */
5666
5782
  max-width: var(--content-width);
5667
5783
  margin-inline: auto;
5784
+ min-width: 0; /* Allow shrinking so max-width wins when content would force wider */
5668
5785
  /* Padding with section background - responsive to match PageContainer */
5669
5786
  padding-inline: var(--gap-md);
5670
5787
  padding-top: var(--gap-lg);
@@ -5912,6 +6029,9 @@ input[type='number'] {
5912
6029
 
5913
6030
  /* Sheet positioning by side - SPATIAL METAPHOR */
5914
6031
 
6032
+ /* Physical properties intentional: Sheet anchors to viewport edges regardless of text direction.
6033
+ Logical inset-inline would incorrectly swap sides in RTL for left/right sheet variants. */
6034
+
5915
6035
  /* RIGHT / LEFT (Desktop Panels) */
5916
6036
 
5917
6037
  .dndev-sheet-content[data-side='right'],.dndev-sheet-content[data-side='left'] {
@@ -5952,8 +6072,7 @@ input[type='number'] {
5952
6072
  max-height: 92dvh;
5953
6073
  /* Never touch top edge */
5954
6074
  width: 100%;
5955
- margin-left: auto;
5956
- margin-right: auto;
6075
+ margin-inline: auto;
5957
6076
 
5958
6077
  /* On larger screens, constrain width */
5959
6078
  }
@@ -5972,16 +6091,16 @@ input[type='number'] {
5972
6091
  top: 0;
5973
6092
  border-bottom: var(--border-hairline) solid var(--line-1);
5974
6093
  /* Rounded bottom corners only */
5975
- border-bottom-left-radius: var(--radius-lg);
5976
- border-bottom-right-radius: var(--radius-lg);
6094
+ border-end-start-radius: var(--radius-lg);
6095
+ border-end-end-radius: var(--radius-lg);
5977
6096
  }
5978
6097
 
5979
6098
  .dndev-sheet-content[data-side='bottom'] {
5980
6099
  bottom: 0;
5981
6100
  border-top: var(--border-hairline) solid var(--line-1);
5982
6101
  /* Rounded top corners only */
5983
- border-top-left-radius: var(--radius-lg);
5984
- border-top-right-radius: var(--radius-lg);
6102
+ border-start-start-radius: var(--radius-lg);
6103
+ border-start-end-radius: var(--radius-lg);
5985
6104
  }
5986
6105
 
5987
6106
  /* DRAG HANDLE PILL - Visual affordance for draggable sheets */
@@ -6300,7 +6419,8 @@ input[type='number'] {
6300
6419
  min-width: 1.25rem;
6301
6420
  min-height: 1.25rem;
6302
6421
  border-radius: var(--radius-full);
6303
- background-color: var(--background);
6422
+ /* --card not --background: surface must be opaque (--background can be transparent in some themes) */
6423
+ background-color: var(--card);
6304
6424
  border: 2px solid var(--primary);
6305
6425
  box-shadow: var(--shadow-md);
6306
6426
  transition: all var(--dur-fast) var(--ease-in-out);
@@ -6371,7 +6491,8 @@ input[type='number'] {
6371
6491
  font-size: var(--font-size-xs);
6372
6492
  font-weight: var(--font-weight-medium);
6373
6493
  color: var(--foreground);
6374
- background-color: var(--background);
6494
+ /* --card not --background: surface must be opaque */
6495
+ background-color: var(--card);
6375
6496
  padding: 0.125rem 0.375rem;
6376
6497
  border-radius: var(--radius-interactive);
6377
6498
  box-shadow: var(--shadow-sm);
@@ -6395,7 +6516,7 @@ input[type='number'] {
6395
6516
  height: 1em;
6396
6517
  border: 2px solid transparent;
6397
6518
  border-top-color: var(--primary);
6398
- border-right-color: var(--primary);
6519
+ border-inline-end-color: var(--primary);
6399
6520
  border-radius: 50%;
6400
6521
  animation: spin 0.6s linear infinite;
6401
6522
  display: inline-block;
@@ -6405,42 +6526,42 @@ input[type='number'] {
6405
6526
 
6406
6527
  .dndev-spinner[data-variant='default'] {
6407
6528
  border-top-color: var(--foreground);
6408
- border-right-color: var(--foreground);
6529
+ border-inline-end-color: var(--foreground);
6409
6530
  }
6410
6531
 
6411
6532
  .dndev-spinner[data-variant='muted'] {
6412
6533
  border-top-color: var(--muted-foreground);
6413
- border-right-color: var(--muted-foreground);
6534
+ border-inline-end-color: var(--muted-foreground);
6414
6535
  }
6415
6536
 
6416
6537
  .dndev-spinner[data-variant='primary'] {
6417
6538
  border-top-color: var(--primary);
6418
- border-right-color: var(--primary);
6539
+ border-inline-end-color: var(--primary);
6419
6540
  }
6420
6541
 
6421
6542
  .dndev-spinner[data-variant='secondary'] {
6422
6543
  border-top-color: var(--secondary);
6423
- border-right-color: var(--secondary);
6544
+ border-inline-end-color: var(--secondary);
6424
6545
  }
6425
6546
 
6426
6547
  .dndev-spinner[data-variant='accent'] {
6427
6548
  border-top-color: var(--accent);
6428
- border-right-color: var(--accent);
6549
+ border-inline-end-color: var(--accent);
6429
6550
  }
6430
6551
 
6431
6552
  .dndev-spinner[data-variant='success'] {
6432
6553
  border-top-color: var(--success);
6433
- border-right-color: var(--success);
6554
+ border-inline-end-color: var(--success);
6434
6555
  }
6435
6556
 
6436
6557
  .dndev-spinner[data-variant='warning'] {
6437
6558
  border-top-color: var(--warning);
6438
- border-right-color: var(--warning);
6559
+ border-inline-end-color: var(--warning);
6439
6560
  }
6440
6561
 
6441
6562
  .dndev-spinner[data-variant='destructive'] {
6442
6563
  border-top-color: var(--destructive);
6443
- border-right-color: var(--destructive);
6564
+ border-inline-end-color: var(--destructive);
6444
6565
  }
6445
6566
 
6446
6567
  /* Overlay variant - full-page loading */
@@ -6724,6 +6845,8 @@ input[type='number'] {
6724
6845
  display: flex;
6725
6846
  align-items: center;
6726
6847
  justify-content: space-between;
6848
+ gap: var(--gap-md);
6849
+ margin-top: var(--gap-md);
6727
6850
  }
6728
6851
 
6729
6852
  .dndev-stepper-info {
@@ -7163,19 +7286,20 @@ input[type='number'] {
7163
7286
  word-break: break-word;
7164
7287
  border: var(--border-hairline) solid var(--line-2); /* Show clickable area */
7165
7288
 
7166
- /* Fallback (no variant): inactive = primary, active = foreground/background */
7289
+ /* Fallback (no variant): inactive = primary, active = foreground/card */
7167
7290
  background-color: var(--primary);
7168
7291
  color: var(--primary-foreground);
7169
7292
  }
7170
7293
 
7171
7294
  .dndev-interactive[data-role='tab-trigger'][data-state='active'] {
7172
- background-color: var(--background);
7295
+ /* --card not --background: active tab surface must be opaque (--background can be transparent in some themes) */
7296
+ background-color: var(--card);
7173
7297
  color: var(--foreground);
7174
7298
  box-shadow: var(--shadow-sm);
7175
7299
  border-color: var(--primary);
7176
7300
  }
7177
7301
 
7178
- /* Default/Primary variant: inactive = primary, active = foreground/background */
7302
+ /* Default/Primary variant: inactive = primary, active = foreground/card */
7179
7303
 
7180
7304
  .dndev-interactive[data-role='tab-trigger'][data-variant='default'],.dndev-interactive[data-role='tab-trigger'][data-variant='primary'] {
7181
7305
  background-color: var(--primary);
@@ -7183,13 +7307,14 @@ input[type='number'] {
7183
7307
  }
7184
7308
 
7185
7309
  [data-state='active']:is(.dndev-interactive[data-role='tab-trigger'][data-variant='default'],.dndev-interactive[data-role='tab-trigger'][data-variant='primary']) {
7186
- background-color: var(--background);
7310
+ /* --card not --background: active tab surface must be opaque */
7311
+ background-color: var(--card);
7187
7312
  color: var(--foreground);
7188
7313
  box-shadow: var(--shadow-sm);
7189
7314
  border-color: var(--primary);
7190
7315
  }
7191
7316
 
7192
- /* Secondary variant: inactive = secondary, active = foreground/background */
7317
+ /* Secondary variant: inactive = secondary, active = foreground/card */
7193
7318
 
7194
7319
  .dndev-interactive[data-role='tab-trigger'][data-variant='secondary'] {
7195
7320
  background-color: var(--secondary);
@@ -7197,13 +7322,14 @@ input[type='number'] {
7197
7322
  }
7198
7323
 
7199
7324
  .dndev-interactive[data-role='tab-trigger'][data-variant='secondary'][data-state='active'] {
7200
- background-color: var(--background);
7325
+ /* --card not --background: active tab surface must be opaque */
7326
+ background-color: var(--card);
7201
7327
  color: var(--foreground);
7202
7328
  box-shadow: var(--shadow-sm);
7203
7329
  border-color: var(--secondary);
7204
7330
  }
7205
7331
 
7206
- /* Accent variant: inactive = accent, active = foreground/background */
7332
+ /* Accent variant: inactive = accent, active = foreground/card */
7207
7333
 
7208
7334
  .dndev-interactive[data-role='tab-trigger'][data-variant='accent'] {
7209
7335
  background-color: var(--accent);
@@ -7211,7 +7337,8 @@ input[type='number'] {
7211
7337
  }
7212
7338
 
7213
7339
  .dndev-interactive[data-role='tab-trigger'][data-variant='accent'][data-state='active'] {
7214
- background-color: var(--background);
7340
+ /* --card not --background: active tab surface must be opaque */
7341
+ background-color: var(--card);
7215
7342
  color: var(--foreground);
7216
7343
  box-shadow: var(--shadow-sm);
7217
7344
  border-color: var(--accent);
@@ -7231,7 +7358,7 @@ input[type='number'] {
7231
7358
  border-color: var(--primary);
7232
7359
  }
7233
7360
 
7234
- /* Warning variant: inactive = warning, active = foreground/background */
7361
+ /* Warning variant: inactive = warning, active = foreground/card */
7235
7362
 
7236
7363
  .dndev-interactive[data-role='tab-trigger'][data-variant='warning'] {
7237
7364
  background-color: var(--warning);
@@ -7239,13 +7366,14 @@ input[type='number'] {
7239
7366
  }
7240
7367
 
7241
7368
  .dndev-interactive[data-role='tab-trigger'][data-variant='warning'][data-state='active'] {
7242
- background-color: var(--background);
7369
+ /* --card not --background: active tab surface must be opaque */
7370
+ background-color: var(--card);
7243
7371
  color: var(--foreground);
7244
7372
  box-shadow: var(--shadow-sm);
7245
7373
  border-color: var(--warning);
7246
7374
  }
7247
7375
 
7248
- /* Success variant: inactive = success, active = foreground/background */
7376
+ /* Success variant: inactive = success, active = foreground/card */
7249
7377
 
7250
7378
  .dndev-interactive[data-role='tab-trigger'][data-variant='success'] {
7251
7379
  background-color: var(--success);
@@ -7253,13 +7381,14 @@ input[type='number'] {
7253
7381
  }
7254
7382
 
7255
7383
  .dndev-interactive[data-role='tab-trigger'][data-variant='success'][data-state='active'] {
7256
- background-color: var(--background);
7384
+ /* --card not --background: active tab surface must be opaque */
7385
+ background-color: var(--card);
7257
7386
  color: var(--foreground);
7258
7387
  box-shadow: var(--shadow-sm);
7259
7388
  border-color: var(--success);
7260
7389
  }
7261
7390
 
7262
- /* Destructive variant: inactive = destructive, active = foreground/background */
7391
+ /* Destructive variant: inactive = destructive, active = foreground/card */
7263
7392
 
7264
7393
  .dndev-interactive[data-role='tab-trigger'][data-variant='destructive'] {
7265
7394
  background-color: var(--destructive);
@@ -7267,7 +7396,8 @@ input[type='number'] {
7267
7396
  }
7268
7397
 
7269
7398
  .dndev-interactive[data-role='tab-trigger'][data-variant='destructive'][data-state='active'] {
7270
- background-color: var(--background);
7399
+ /* --card not --background: active tab surface must be opaque */
7400
+ background-color: var(--card);
7271
7401
  color: var(--foreground);
7272
7402
  box-shadow: var(--shadow-sm);
7273
7403
  border-color: var(--destructive);
@@ -7314,7 +7444,7 @@ input[type='number'] {
7314
7444
  align-items: center;
7315
7445
  justify-content: center;
7316
7446
  padding: 0;
7317
- margin-left: 2px;
7447
+ margin-inline-start: 2px;
7318
7448
  background: transparent;
7319
7449
  border: none;
7320
7450
  cursor: pointer;
@@ -7477,7 +7607,11 @@ input[type='number'] {
7477
7607
  border-radius: var(--radius-interactive);
7478
7608
  }
7479
7609
 
7480
- /* Level overrides */
7610
+ /* Level overrides — headline font for all heading levels */
7611
+
7612
+ .dndev-text-base[data-level^='h'] {
7613
+ font-family: var(--font-headline);
7614
+ }
7481
7615
 
7482
7616
  .dndev-text-base[data-level='h1'] {
7483
7617
  font-size: var(--font-size-3xl);
@@ -7827,7 +7961,8 @@ input[type='number'] {
7827
7961
  z-index: var(--z-tooltip);
7828
7962
  /* Inverted colors for high contrast - industry standard (Vercel, GitHub, Stripe) */
7829
7963
  background: var(--foreground);
7830
- color: var(--background);
7964
+ /* --card not --background: inverted text must be opaque (--background can be transparent in some themes) */
7965
+ color: var(--card);
7831
7966
  box-shadow: var(--shadow-lg); /* Stronger shadow for visibility */
7832
7967
  padding: 0.375rem 0.5rem; /* 6px 8px - industry standard */
7833
7968
  font-size: var(--font-size-xs); /* 12px */
@@ -8467,6 +8602,12 @@ input[type='number'] {
8467
8602
 
8468
8603
  /* Tone backgrounds - apply directly to section element (like CallToAction) */
8469
8604
 
8605
+ /* Ghost (default) - transparent, allows background images to show through */
8606
+
8607
+ .dndev-section-full-width[data-tone='ghost'],.dndev-section-full-width:not([data-tone]) {
8608
+ background: transparent;
8609
+ }
8610
+
8470
8611
  .dndev-section-full-width[data-tone='base'] {
8471
8612
  background: var(--background);
8472
8613
  }
@@ -8475,16 +8616,37 @@ input[type='number'] {
8475
8616
  background: var(--muted);
8476
8617
  }
8477
8618
 
8478
- .dndev-section-full-width[data-tone='elevated'] {
8619
+ .dndev-section-full-width[data-tone='contrast'] {
8479
8620
  background: var(--background);
8621
+ color: var(--foreground);
8480
8622
  }
8481
8623
 
8482
- .dndev-section-full-width[data-tone='contrast'] {
8624
+ .dndev-section-full-width[data-tone='accent'] {
8625
+ background: color-mix(in oklab, var(--accent) 5%, transparent);
8626
+ }
8627
+
8628
+ /* HeroSection tone backgrounds - same system as Section/CallToAction */
8629
+
8630
+ /* Ghost (default) - transparent, allows background images to show through */
8631
+
8632
+ .dndev-hero-section[data-tone='ghost'],.dndev-hero-section:not([data-tone]) {
8633
+ background: transparent;
8634
+ }
8635
+
8636
+ .dndev-hero-section[data-tone='base'] {
8637
+ background: var(--background);
8638
+ }
8639
+
8640
+ .dndev-hero-section[data-tone='muted'] {
8641
+ background: var(--muted);
8642
+ }
8643
+
8644
+ .dndev-hero-section[data-tone='contrast'] {
8483
8645
  background: var(--background);
8484
8646
  color: var(--foreground);
8485
8647
  }
8486
8648
 
8487
- .dndev-section-full-width[data-tone='accent'] {
8649
+ .dndev-hero-section[data-tone='accent'] {
8488
8650
  background: color-mix(in oklab, var(--accent) 5%, transparent);
8489
8651
  }
8490
8652
 
@@ -8697,10 +8859,7 @@ h4[data-variant='code'] {
8697
8859
  }
8698
8860
 
8699
8861
  .dndev-inset-0 {
8700
- top: 0;
8701
- right: 0;
8702
- bottom: 0;
8703
- left: 0;
8862
+ inset: 0;
8704
8863
  }
8705
8864
 
8706
8865
  .dndev-inset-y-0 {
@@ -8708,8 +8867,8 @@ h4[data-variant='code'] {
8708
8867
  bottom: 0;
8709
8868
  }
8710
8869
 
8711
- .dndev-left-0 {
8712
- left: 0;
8870
+ .dndev-inset-inline-start-0 {
8871
+ inset-inline-start: 0;
8713
8872
  }
8714
8873
 
8715
8874
  .dndev-min-h-0 {
@@ -9346,6 +9505,7 @@ main[role='main'][data-routing-animation='none'] {
9346
9505
  .dndev-layout[data-footer-mode='scroll'] main[role='main'] {
9347
9506
  overflow-y: visible;
9348
9507
  overflow-x: hidden;
9508
+ contain: style;
9349
9509
  }
9350
9510
 
9351
9511
  .dndev-layout[data-footer-mode='scroll'] footer[role='contentinfo'] {
@@ -9375,6 +9535,7 @@ main[role='main'][data-routing-animation='none'] {
9375
9535
  .dndev-layout main[role='main'] {
9376
9536
  overflow-y: visible;
9377
9537
  overflow-x: hidden;
9538
+ contain: style;
9378
9539
  }
9379
9540
 
9380
9541
  .dndev-layout footer[role='contentinfo'] {
@@ -9412,6 +9573,7 @@ header[role='banner'] {
9412
9573
  position: relative;
9413
9574
  z-index: var(--z-header);
9414
9575
  contain: layout style;
9576
+ overflow: visible; /* Allow absolutely positioned children's shadows to extend beyond bounds */
9415
9577
 
9416
9578
  /* Container queries support for responsive components */
9417
9579
  container-type: inline-size;
@@ -9447,7 +9609,11 @@ header[role='banner'] {
9447
9609
  height: 100%;
9448
9610
  max-height: 100%;
9449
9611
  gap: var(--gap-sm);
9450
- overflow: hidden;
9612
+ overflow: visible; /* Allow shadows to show */
9613
+ /* Theme-controlled padding for shadows that extend beyond bounds (e.g., brutalist hard-offset shadows) */
9614
+ /* Shadows extend rightward, so only end padding needed */
9615
+ /* Defaults to 0 for themes with diffused shadows that don't extend beyond bounds */
9616
+ padding-inline-end: var(--header-shadow-padding, 0);
9451
9617
  }
9452
9618
 
9453
9619
  .header-end {
@@ -9459,7 +9625,11 @@ header[role='banner'] {
9459
9625
  max-height: 100%;
9460
9626
  margin-inline-start: auto;
9461
9627
  gap: var(--gap-sm);
9462
- overflow: hidden;
9628
+ overflow: visible; /* Allow shadows to show */
9629
+ /* Theme-controlled padding for shadows that extend beyond bounds (e.g., brutalist hard-offset shadows) */
9630
+ /* Shadows extend rightward, so only end padding needed */
9631
+ /* Defaults to 0 for themes with diffused shadows that don't extend beyond bounds */
9632
+ padding-inline-end: var(--header-shadow-padding, 0);
9463
9633
  }
9464
9634
 
9465
9635
  /* Viewport-centered center content - absolutely positioned overlay */
@@ -9472,6 +9642,10 @@ header[role='banner'] .header-center {
9472
9642
  width: -moz-fit-content;
9473
9643
  width: fit-content;
9474
9644
  z-index: 1;
9645
+ /* Theme-controlled padding for shadows that extend beyond bounds (e.g., brutalist hard-offset shadows) */
9646
+ /* Shadows extend rightward, so only end padding needed */
9647
+ /* Defaults to 0 for themes with diffused shadows that don't extend beyond bounds */
9648
+ padding-inline-end: var(--header-shadow-padding, 0);
9475
9649
  }
9476
9650
 
9477
9651
  /* ===========================
@@ -9825,8 +9999,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
9825
9999
 
9826
10000
  .merged-bar {
9827
10001
  position: fixed;
9828
- left: 0;
9829
- right: 0;
10002
+ inset-inline: 0;
9830
10003
  display: none;
9831
10004
  /* Hidden by default - CSS shows on mobile */
9832
10005
  align-items: center;
@@ -9835,8 +10008,8 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
9835
10008
  contain: layout style;
9836
10009
 
9837
10010
  /* Safe area padding for notched devices */
9838
- padding-left: max(var(--content-padding), env(safe-area-inset-left));
9839
- padding-right: max(var(--content-padding), env(safe-area-inset-right));
10011
+ padding-inline-start: max(var(--content-padding), env(safe-area-inset-left));
10012
+ padding-inline-end: max(var(--content-padding), env(safe-area-inset-right));
9840
10013
  }
9841
10014
 
9842
10015
  .merged-bar[data-position='top'] {
@@ -10181,6 +10354,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
10181
10354
  .dndev-container {
10182
10355
  width: 100%;
10183
10356
  max-width: var(--content-width);
10357
+ min-width: 0; /* Allow shrinking in flex so max-width wins */
10184
10358
  flex: 1 1 auto;
10185
10359
 
10186
10360
  /* First child spacing when enabled */
@@ -10296,7 +10470,6 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
10296
10470
 
10297
10471
  .dndev-container > .dndev-section-full-width,
10298
10472
  .dndev-container > .dndev-cta,
10299
- .dndev-container > .dndev-hero-section,
10300
10473
  .dndev-container > .dndev-tech-bento {
10301
10474
  /* Break out of PageContainer padding and max-width constraint */
10302
10475
  /* Account for sidebar: --sidebar-width is 0px for presets without sidebar */
@@ -10306,6 +10479,19 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
10306
10479
  /* Eat gap BEFORE section only */
10307
10480
  margin-top: calc(-1 * var(--gap-lg));
10308
10481
  margin-bottom: 0;
10482
+ /* Pass through so inner content (e.g. .dndev-section-content) can use it */
10483
+ --content-width: var(--max-content-width, 100%);
10484
+ }
10485
+
10486
+ /* HeroSection: only breakthrough when it has fullHeight (needs full viewport background) */
10487
+
10488
+ .dndev-container > .dndev-hero-section[style*='height'] {
10489
+ width: calc(100dvw - var(--sidebar-width));
10490
+ max-width: calc(100dvw - var(--sidebar-width));
10491
+ margin-inline: calc((-50dvw + var(--sidebar-width) / 2) + 50%);
10492
+ margin-top: calc(-1 * var(--gap-lg));
10493
+ margin-bottom: 0;
10494
+ --content-width: var(--max-content-width, 100%);
10309
10495
  }
10310
10496
 
10311
10497
  .footer-mobile-button:hover {