@donotdev/ui 0.0.2 → 0.0.3

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 (104) hide show
  1. package/dist/components/auth/AuthMenu.d.ts.map +1 -1
  2. package/dist/components/auth/AuthMenu.js +15 -28
  3. package/dist/components/common/FeatureCard.js +1 -1
  4. package/dist/components/cookie-consent/CookieConsent.d.ts.map +1 -1
  5. package/dist/components/cookie-consent/CookieConsent.js +2 -41
  6. package/dist/components/cookie-consent/index.d.ts +0 -1
  7. package/dist/components/cookie-consent/index.d.ts.map +1 -1
  8. package/dist/components/cookie-consent/index.js +1 -1
  9. package/dist/components/layout/components/DropdownNavigation.d.ts.map +1 -1
  10. package/dist/components/layout/components/header/ThemeToggle.d.ts +1 -1
  11. package/dist/components/layout/components/header/ThemeToggle.d.ts.map +1 -1
  12. package/dist/components/layout/components/header/ThemeToggle.js +5 -4
  13. package/dist/dndev.css +137 -120
  14. package/dist/index.js +4 -4
  15. package/dist/internal/devtools/DebugTools.d.ts.map +1 -1
  16. package/dist/internal/devtools/DebugTools.js +8 -4
  17. package/dist/internal/devtools/components/ConfigTab.d.ts.map +1 -1
  18. package/dist/internal/devtools/components/ConfigTab.js +31 -133
  19. package/dist/internal/devtools/components/DebugDialog.d.ts.map +1 -1
  20. package/dist/internal/devtools/components/DebugDialog.js +11 -520
  21. package/dist/internal/devtools/components/DesignTab.d.ts +2 -0
  22. package/dist/internal/devtools/components/DesignTab.d.ts.map +1 -0
  23. package/dist/internal/devtools/components/DesignTab.js +220 -0
  24. package/dist/internal/devtools/components/StoresTab.d.ts.map +1 -1
  25. package/dist/internal/devtools/components/StoresTab.js +54 -102
  26. package/dist/internal/devtools/components/index.d.ts +1 -6
  27. package/dist/internal/devtools/components/index.d.ts.map +1 -1
  28. package/dist/internal/devtools/components/index.js +1 -6
  29. package/dist/internal/devtools/utils/index.d.ts +0 -1
  30. package/dist/internal/devtools/utils/index.d.ts.map +1 -1
  31. package/dist/internal/devtools/utils/index.js +0 -1
  32. package/dist/internal/initializers/BaseStoresInitializer.d.ts.map +1 -1
  33. package/dist/internal/initializers/BaseStoresInitializer.js +25 -58
  34. package/dist/internal/layout/DnDevLayout.js +3 -3
  35. package/dist/internal/layout/components/footer/FooterBranding.d.ts.map +1 -1
  36. package/dist/internal/layout/components/footer/FooterBranding.js +3 -1
  37. package/dist/routing/AuthGuard.d.ts +14 -10
  38. package/dist/routing/AuthGuard.d.ts.map +1 -1
  39. package/dist/routing/AuthGuard.js +25 -22
  40. package/dist/routing/Link.d.ts +2 -2
  41. package/dist/routing/Link.js +2 -2
  42. package/dist/routing/hooks/hooks.next.js +1 -1
  43. package/dist/routing/hooks/hooks.vite.js +1 -1
  44. package/dist/routing/hooks/useRedirectGuard.next.d.ts +2 -36
  45. package/dist/routing/hooks/useRedirectGuard.next.d.ts.map +1 -1
  46. package/dist/routing/hooks/useRedirectGuard.next.js +14 -55
  47. package/dist/routing/hooks/useRedirectGuard.vite.d.ts +2 -36
  48. package/dist/routing/hooks/useRedirectGuard.vite.d.ts.map +1 -1
  49. package/dist/routing/hooks/useRedirectGuard.vite.js +14 -55
  50. package/dist/routing/index.d.ts +0 -1
  51. package/dist/routing/index.d.ts.map +1 -1
  52. package/dist/routing/index.js +1 -1
  53. package/dist/styles/index.css +137 -120
  54. package/dist/utils/assetResolver.d.ts +5 -5
  55. package/dist/utils/assetResolver.js +4 -4
  56. package/dist/utils/useAuthSafe.d.ts +25 -12
  57. package/dist/utils/useAuthSafe.d.ts.map +1 -1
  58. package/dist/utils/useAuthSafe.js +3 -1
  59. package/dist/utils/useAuthVisibility.d.ts +3 -3
  60. package/dist/utils/useAuthVisibility.d.ts.map +1 -1
  61. package/dist/utils/useAuthVisibility.js +25 -21
  62. package/dist/utils/useBillingVisibility.d.ts +2 -2
  63. package/dist/utils/useBillingVisibility.d.ts.map +1 -1
  64. package/dist/utils/useBillingVisibility.js +12 -13
  65. package/dist/utils/useCrudSafe.d.ts +1 -1
  66. package/dist/utils/useCrudSafe.d.ts.map +1 -1
  67. package/dist/utils/useCrudSafe.js +26 -13
  68. package/dist/utils/useOAuthSafe.d.ts +25 -12
  69. package/dist/utils/useOAuthSafe.d.ts.map +1 -1
  70. package/dist/utils/useStripeBillingSafe.d.ts +30 -18
  71. package/dist/utils/useStripeBillingSafe.d.ts.map +1 -1
  72. package/dist/utils/useStripeBillingSafe.js +5 -6
  73. package/dist/vite-routing/AppRoutes.d.ts.map +1 -1
  74. package/dist/vite-routing/AppRoutes.js +5 -5
  75. package/dist/vite-routing/RootLayout.d.ts.map +1 -1
  76. package/dist/vite-routing/RootLayout.js +34 -7
  77. package/package.json +9 -9
  78. package/dist/internal/devtools/components/AuthTab.d.ts +0 -2
  79. package/dist/internal/devtools/components/AuthTab.d.ts.map +0 -1
  80. package/dist/internal/devtools/components/AuthTab.js +0 -98
  81. package/dist/internal/devtools/components/ColorRatioTab.d.ts +0 -2
  82. package/dist/internal/devtools/components/ColorRatioTab.d.ts.map +0 -1
  83. package/dist/internal/devtools/components/ColorRatioTab.js +0 -322
  84. package/dist/internal/devtools/components/DebugToggle.d.ts +0 -2
  85. package/dist/internal/devtools/components/DebugToggle.d.ts.map +0 -1
  86. package/dist/internal/devtools/components/DebugToggle.js +0 -57
  87. package/dist/internal/devtools/components/EnvironmentTab.d.ts +0 -2
  88. package/dist/internal/devtools/components/EnvironmentTab.d.ts.map +0 -1
  89. package/dist/internal/devtools/components/EnvironmentTab.js +0 -26
  90. package/dist/internal/devtools/components/I18nTab.d.ts +0 -2
  91. package/dist/internal/devtools/components/I18nTab.d.ts.map +0 -1
  92. package/dist/internal/devtools/components/I18nTab.js +0 -76
  93. package/dist/internal/devtools/components/OAuthGuideButton.d.ts +0 -10
  94. package/dist/internal/devtools/components/OAuthGuideButton.d.ts.map +0 -1
  95. package/dist/internal/devtools/components/OAuthGuideButton.js +0 -71
  96. package/dist/internal/devtools/components/StripeDebugTab.d.ts +0 -2
  97. package/dist/internal/devtools/components/StripeDebugTab.d.ts.map +0 -1
  98. package/dist/internal/devtools/components/StripeDebugTab.js +0 -175
  99. package/dist/internal/devtools/components/ThemesTab.d.ts +0 -2
  100. package/dist/internal/devtools/components/ThemesTab.d.ts.map +0 -1
  101. package/dist/internal/devtools/components/ThemesTab.js +0 -77
  102. package/dist/internal/devtools/utils/spacingAnalyzer.d.ts +0 -15
  103. package/dist/internal/devtools/utils/spacingAnalyzer.d.ts.map +0 -1
  104. package/dist/internal/devtools/utils/spacingAnalyzer.js +0 -88
package/dist/dndev.css CHANGED
@@ -539,7 +539,7 @@ a:not(.dndev-interactive):active {
539
539
  a:focus-visible {
540
540
  outline: 2px solid var(--ring);
541
541
  outline-offset: 2px;
542
- border-radius: var(--radius-md);
542
+ border-radius: var(--radius-interactive);
543
543
  }
544
544
 
545
545
  /* ===========================
@@ -682,7 +682,7 @@ em {
682
682
  .dndev-input {
683
683
  display: flex;
684
684
  width: 100%;
685
- border-radius: 0;
685
+ border-radius: var(--radius-interactive);
686
686
  border: var(--border-hairline) solid var(--line-2);
687
687
  background-color: transparent;
688
688
  color: var(--foreground);
@@ -944,15 +944,21 @@ em {
944
944
 
945
945
  .dndev-surface[data-role='card'] {
946
946
  padding: var(--gap-md);
947
- border-radius: var(--radius-md);
947
+ border-radius: var(--radius-surface);
948
948
  }
949
949
 
950
950
  /* Elevated cards - stronger shadow */
951
951
 
952
- .dndev-surface[data-elevated='true'] {
952
+ /* Apply if elevated=true OR (clickable=true AND elevated!=false) */
953
+
954
+ .dndev-surface[data-elevated='true'],.dndev-surface[data-clickable='true']:not([data-elevated='false']) {
953
955
  box-shadow: var(--shadow-xl);
954
956
  }
955
957
 
958
+ :is(.dndev-surface[data-elevated='true'],.dndev-surface[data-clickable='true']:not([data-elevated='false'])):dir(rtl) {
959
+ box-shadow: var(--shadow-xl-rtl);
960
+ }
961
+
956
962
  /* Clickable cards - hover effects */
957
963
 
958
964
  .dndev-surface[data-clickable='true'] {
@@ -1185,7 +1191,7 @@ em {
1185
1191
 
1186
1192
  .dndev-floating[data-role='card'] {
1187
1193
  padding: var(--gap-md);
1188
- border-radius: var(--radius-md);
1194
+ border-radius: var(--radius-surface);
1189
1195
  }
1190
1196
 
1191
1197
  .dndev-floating[data-role='floating'] {
@@ -1647,6 +1653,38 @@ em {
1647
1653
  color: var(--background);
1648
1654
  }
1649
1655
 
1656
+ /* CONTROL GROUP - Shared pattern for grouped controls (RadioGroup, Checkbox groups) */
1657
+
1658
+ .dndev-control-group {
1659
+ display: grid;
1660
+ gap: var(--gap-md); /* 16px - standard spacing between grouped items */
1661
+
1662
+ /* Control + label pattern - used by RadioGroup, CheckboxFieldComponent, etc. */
1663
+ }
1664
+
1665
+ .dndev-control-group label {
1666
+ display: flex;
1667
+ align-items: center;
1668
+ gap: var(--gap-sm); /* 8px - spacing between control and label */
1669
+ font-size: var(--font-size-base);
1670
+ color: var(--foreground);
1671
+ cursor: pointer;
1672
+ transition: color var(--transition-fast);
1673
+
1674
+ /* Subtle hover on label text */
1675
+ }
1676
+
1677
+ :is(.dndev-control-group label):hover {
1678
+ color: var(--primary);
1679
+ }
1680
+
1681
+ /* Selected state - label color changes */
1682
+
1683
+ :is(.dndev-control-group label):has([data-state='checked']),:is(.dndev-control-group label):has([data-state='on']) {
1684
+ color: var(--primary);
1685
+ font-weight: var(--font-weight-medium);
1686
+ }
1687
+
1650
1688
  /**
1651
1689
  * Variant system - 8 control variants
1652
1690
  * Variants override --control-border to use semantic colors
@@ -1654,37 +1692,37 @@ em {
1654
1692
  * On state: fills with variant color
1655
1693
  */
1656
1694
 
1657
- .dndev-control[data-variant='primary'] {
1695
+ .dndev-control-group[data-variant='primary'] {
1658
1696
  --control-border: var(--primary);
1659
1697
  }
1660
1698
 
1661
- .dndev-control[data-variant='secondary'] {
1699
+ .dndev-control-group[data-variant='secondary'] {
1662
1700
  --control-border: var(--secondary);
1663
1701
  }
1664
1702
 
1665
- .dndev-control[data-variant='muted'] {
1703
+ .dndev-control-group[data-variant='muted'] {
1666
1704
  --control-border: var(--muted-foreground);
1667
1705
  }
1668
1706
 
1669
- .dndev-control[data-variant='accent'] {
1707
+ .dndev-control-group[data-variant='accent'] {
1670
1708
  --control-border: var(--accent);
1671
1709
  }
1672
1710
 
1673
- .dndev-control[data-variant='success'] {
1711
+ .dndev-control-group[data-variant='success'] {
1674
1712
  --control-border: var(--success);
1675
1713
  }
1676
1714
 
1677
- .dndev-control[data-variant='warning'] {
1715
+ .dndev-control-group[data-variant='warning'] {
1678
1716
  --control-border: var(--warning);
1679
1717
  }
1680
1718
 
1681
- .dndev-control[data-variant='destructive'] {
1719
+ .dndev-control-group[data-variant='destructive'] {
1682
1720
  --control-border: var(--destructive);
1683
1721
  }
1684
1722
 
1685
1723
  /* Default variant explicitly (same as base) */
1686
1724
 
1687
- .dndev-control[data-variant='default'] {
1725
+ .dndev-control-group[data-variant='default'] {
1688
1726
  --control-border: color-mix(
1689
1727
  in oklab,
1690
1728
  var(--foreground) 70%,
@@ -1772,7 +1810,7 @@ em {
1772
1810
  display: grid;
1773
1811
  gap: var(--gap-sm);
1774
1812
  padding: var(--gap-md);
1775
- border-radius: var(--radius-none);
1813
+ border-radius: var(--radius-floating);
1776
1814
  border: var(--border-hairline) solid var(--border);
1777
1815
  /* Inverted floating colors: popover-foreground as background, popover as foreground */
1778
1816
  background: color-mix(in oklab, var(--popover-foreground) 95%, transparent);
@@ -1917,7 +1955,7 @@ em {
1917
1955
  width: var(--icon-md);
1918
1956
  height: var(--icon-md);
1919
1957
  border: 2px solid currentColor;
1920
- border-radius: 50%;
1958
+ border-radius: var(--radius-full);
1921
1959
  border-right-color: transparent;
1922
1960
  animation: spin 1s linear infinite;
1923
1961
  }
@@ -2054,7 +2092,7 @@ em {
2054
2092
  display: flex;
2055
2093
  flex-direction: column;
2056
2094
  padding: 0;
2057
- border-radius: 0;
2095
+ border-radius: var(--radius-floating);
2058
2096
  min-width: 15ch; /* Character-based: scales with font size, ensures readable width */
2059
2097
  width: -moz-fit-content;
2060
2098
  width: fit-content; /* Stretch to fit children */
@@ -2408,7 +2446,7 @@ em {
2408
2446
  }
2409
2447
 
2410
2448
  .dndev-blockquote-content {
2411
- font-size: 1.125em; /* 1.125x body (18px on 16px base) */
2449
+ font-size: var(--font-size-lg); /* 20px - emphasized text */
2412
2450
  line-height: 1.7; /* Industry standard for readability */
2413
2451
  font-weight: 400;
2414
2452
  color: inherit;
@@ -2442,10 +2480,14 @@ em {
2442
2480
  */
2443
2481
 
2444
2482
  .dndev-blockquote[data-variant='default'] blockquote {
2445
- padding: var(--gap-md) var(--gap-md) var(--gap-md) var(--gap-lg);
2483
+ padding: var(--gap-md) calc(var(--gap-md) + 4px) var(--gap-md) var(--gap-lg);
2446
2484
  background: var(--muted);
2447
2485
  border-inline-start: 4px solid var(--primary);
2448
- border-radius: 0 var(--radius-md) var(--radius-md) 0;
2486
+ border-inline-end: none;
2487
+ border-block-start: none;
2488
+ border-block-end: none;
2489
+ border-radius: var(--radius-interactive) var(--radius-surface) var(--radius-surface) var(--radius-interactive);
2490
+ overflow: hidden;
2449
2491
  }
2450
2492
 
2451
2493
  .dndev-blockquote[data-variant='default'] .dndev-blockquote-content {
@@ -2466,7 +2508,7 @@ em {
2466
2508
  .dndev-blockquote[data-variant='editorial'] .dndev-blockquote-content {
2467
2509
  font-family: Georgia, 'Times New Roman', serif;
2468
2510
  font-style: italic;
2469
- font-size: 1.25em; /* Larger for editorial impact */
2511
+ font-size: var(--font-size-xl); /* 25px - larger for editorial impact */
2470
2512
  color: inherit;
2471
2513
  opacity: 0.95;
2472
2514
  }
@@ -2484,7 +2526,7 @@ em {
2484
2526
  .dndev-blockquote[data-variant='testimonial'] {
2485
2527
  background: var(--card);
2486
2528
  border: 1px solid var(--border);
2487
- border-radius: var(--radius-lg);
2529
+ border-radius: var(--radius-surface);
2488
2530
  padding: calc(var(--gap-lg) + var(--gap-md)); /* 2.5rem */
2489
2531
  box-shadow:
2490
2532
  0 1px 3px 0 hsl(var(--foreground-hsl) / 0.1),
@@ -2526,11 +2568,11 @@ em {
2526
2568
  }
2527
2569
 
2528
2570
  .dndev-blockquote-content {
2529
- font-size: 1.0625em; /* Slightly smaller on mobile (17px) */
2571
+ font-size: var(--font-size-base); /* Slightly smaller on mobile */
2530
2572
  }
2531
2573
 
2532
2574
  .dndev-blockquote[data-variant='editorial'] .dndev-blockquote-content {
2533
- font-size: 1.125em;
2575
+ font-size: var(--font-size-lg);
2534
2576
  }
2535
2577
 
2536
2578
  .dndev-blockquote[data-variant='testimonial'] {
@@ -2560,7 +2602,7 @@ em {
2560
2602
  color: var(--popover-foreground);
2561
2603
  background: var(--popover);
2562
2604
  border: var(--border-hairline) solid var(--border);
2563
- border-radius: var(--radius-interactive);
2605
+ border-radius: var(--radius-floating);
2564
2606
  box-shadow: var(--shadow-md);
2565
2607
  }
2566
2608
 
@@ -3338,7 +3380,7 @@ em {
3338
3380
 
3339
3381
  .dndev-command-footer-key {
3340
3382
  padding: 0.125rem 0.375rem;
3341
- border-radius: calc(var(--radius-md) * 0.5);
3383
+ border-radius: 2px;
3342
3384
  background: var(--muted);
3343
3385
  border: 1px solid var(--border);
3344
3386
  font-family: var(--font-mono);
@@ -3660,55 +3702,7 @@ em {
3660
3702
  width: 100%;
3661
3703
  }
3662
3704
 
3663
- /* Columns */
3664
-
3665
- .dndev-grid-component[data-cols='1'] {
3666
- grid-template-columns: repeat(1, minmax(0, 1fr));
3667
- }
3668
-
3669
- .dndev-grid-component[data-cols='2'] {
3670
- grid-template-columns: repeat(2, minmax(0, 1fr));
3671
- }
3672
-
3673
- .dndev-grid-component[data-cols='3'] {
3674
- grid-template-columns: repeat(3, minmax(0, 1fr));
3675
- }
3676
-
3677
- .dndev-grid-component[data-cols='4'] {
3678
- grid-template-columns: repeat(4, minmax(0, 1fr));
3679
- }
3680
-
3681
- .dndev-grid-component[data-cols='5'] {
3682
- grid-template-columns: repeat(5, minmax(0, 1fr));
3683
- }
3684
-
3685
- .dndev-grid-component[data-cols='6'] {
3686
- grid-template-columns: repeat(6, minmax(0, 1fr));
3687
- }
3688
-
3689
- .dndev-grid-component[data-cols='10'] {
3690
- grid-template-columns: repeat(10, minmax(0, 1fr));
3691
- }
3692
-
3693
- .dndev-grid-component[data-cols='12'] {
3694
- grid-template-columns: repeat(12, minmax(0, 1fr));
3695
- }
3696
-
3697
- /* Auto-fit/fill columns */
3698
-
3699
- .dndev-grid-component[data-cols='auto-fit'] {
3700
- grid-template-columns: repeat(
3701
- auto-fit,
3702
- minmax(min(100%, var(--min-col-width, 250px)), 1fr)
3703
- );
3704
- }
3705
-
3706
- .dndev-grid-component[data-cols='auto-fill'] {
3707
- grid-template-columns: repeat(
3708
- auto-fill,
3709
- minmax(min(100%, var(--min-col-width, 250px)), 1fr)
3710
- );
3711
- }
3705
+ /* Grid template columns are set via inline styles for maximum flexibility */
3712
3706
 
3713
3707
  /* Spacing from CSS variables */
3714
3708
 
@@ -3886,7 +3880,7 @@ em {
3886
3880
  height: var(--touch-target);
3887
3881
  padding: 0;
3888
3882
  border: 1px solid var(--card-foreground);
3889
- border-radius: var(--radius-md);
3883
+ border-radius: var(--radius-surface);
3890
3884
  background: transparent;
3891
3885
  display: inline-flex;
3892
3886
  align-items: center;
@@ -4026,7 +4020,7 @@ em {
4026
4020
 
4027
4021
  .dndev-json-viewer-container {
4028
4022
  background-color: var(--muted);
4029
- border-radius: var(--radius);
4023
+ border-radius: var(--radius-surface);
4030
4024
  padding: 1rem;
4031
4025
  overflow: auto;
4032
4026
  max-height: 600px;
@@ -4083,7 +4077,7 @@ em {
4083
4077
  align-items: flex-start;
4084
4078
  gap: 0.25rem;
4085
4079
  cursor: pointer;
4086
- border-radius: var(--radius-sm);
4080
+ border-radius: var(--radius-interactive);
4087
4081
  padding-inline-start: 0.25rem;
4088
4082
  padding-inline-end: 0.25rem;
4089
4083
  margin-inline-start: -0.25rem;
@@ -4444,7 +4438,7 @@ em {
4444
4438
  grid-row: span 3;
4445
4439
  height: 100%;
4446
4440
  padding: var(--gap-md);
4447
- border-radius: var(--radius);
4441
+ border-radius: var(--radius-floating);
4448
4442
  background: linear-gradient(
4449
4443
  to bottom,
4450
4444
  color-mix(in oklab, var(--muted) 50%, transparent),
@@ -4468,7 +4462,7 @@ em {
4468
4462
 
4469
4463
  .dndev-nav-menu-item-container {
4470
4464
  padding: var(--gap-md);
4471
- border-radius: var(--radius);
4465
+ border-radius: var(--radius-floating);
4472
4466
  text-decoration: none;
4473
4467
  outline: none;
4474
4468
  }
@@ -4603,27 +4597,37 @@ em {
4603
4597
 
4604
4598
  /* packages/components/src/atomic/RadioGroup/RadioGroup.css */
4605
4599
 
4606
- .dndev-radio-group {
4607
- display: grid;
4608
- gap: var(--gap-sm);
4600
+ /* Uses shared .dndev-control-group pattern from patterns.css */
4609
4601
 
4610
- /* RadioGroup label styling - Stack as="label" now has dndev-text-base */
4611
- }
4602
+ /* Root is display: grid - items are direct children */
4612
4603
 
4613
- .dndev-radio-group label {
4614
- font-size: var(--font-size-base);
4615
- color: var(--foreground);
4616
- transition: color var(--dur-fast) var(--ease-in-out);
4604
+ /* Grid columns via data-cols attribute */
4617
4605
 
4618
- /* Label text when radio is checked */
4606
+ .dndev-radio-group[data-cols] {
4607
+ width: -moz-fit-content;
4608
+ width: fit-content;
4609
+ margin-inline: auto; /* Self-center in parent */
4619
4610
  }
4620
4611
 
4621
- :is(.dndev-radio-group label):has([data-state='checked']) {
4622
- color: var(--primary);
4623
- font-weight: var(--font-weight-medium);
4624
- }
4612
+ .dndev-radio-group[data-cols='2'] { grid-template-columns: repeat(2, auto); }
4613
+
4614
+ .dndev-radio-group[data-cols='3'] { grid-template-columns: repeat(3, auto); }
4615
+
4616
+ .dndev-radio-group[data-cols='4'] { grid-template-columns: repeat(4, auto); }
4617
+
4618
+ .dndev-radio-group[data-cols='5'] { grid-template-columns: repeat(5, auto); }
4619
+
4620
+ .dndev-radio-group[data-cols='6'] { grid-template-columns: repeat(6, auto); }
4625
4621
 
4626
- /* Variant colors for checked labels */
4622
+ .dndev-radio-group[data-cols='10'] { grid-template-columns: repeat(10, auto); }
4623
+
4624
+ .dndev-radio-group[data-cols='12'] { grid-template-columns: repeat(12, auto); }
4625
+
4626
+ .dndev-radio-group[data-cols='auto-fit'] { grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr)); width: 100%; }
4627
+
4628
+ .dndev-radio-group[data-cols='auto-fill'] { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); width: 100%; }
4629
+
4630
+ /* Variant colors for checked labels - override base pattern */
4627
4631
 
4628
4632
  .dndev-radio-group[data-variant='primary'] label:has([data-state='checked']) {
4629
4633
  color: var(--primary);
@@ -4866,6 +4870,12 @@ em {
4866
4870
 
4867
4871
  /* packages/components/src/atomic/Section/Section.css */
4868
4872
 
4873
+ /* Full-width section wrapper for tone backgrounds */
4874
+
4875
+ .dndev-section-full-width {
4876
+ width: 100%;
4877
+ }
4878
+
4869
4879
  /* Content wrapper: constrained + centered + padded */
4870
4880
 
4871
4881
  .dndev-section-content {
@@ -4885,11 +4895,11 @@ em {
4885
4895
  }
4886
4896
  }
4887
4897
 
4888
- /* Section title: XL, uppercase, accent, tracking */
4898
+ /* Section title: LG, uppercase, accent pop color, tracking */
4889
4899
 
4890
4900
  .dndev-section-title {
4891
4901
  display: block;
4892
- font-size: var(--font-size-xl);
4902
+ font-size: var(--font-size-lg);
4893
4903
  font-weight: var(--font-weight-semibold);
4894
4904
  text-transform: uppercase;
4895
4905
  letter-spacing: 0.2em;
@@ -5330,7 +5340,7 @@ em {
5330
5340
  color: var(--foreground);
5331
5341
  background-color: var(--background);
5332
5342
  padding: 0.125rem 0.375rem;
5333
- border-radius: var(--radius);
5343
+ border-radius: var(--radius-interactive);
5334
5344
  box-shadow: var(--shadow-sm);
5335
5345
  white-space: nowrap;
5336
5346
  pointer-events: none;
@@ -5784,7 +5794,7 @@ em {
5784
5794
  position: relative;
5785
5795
  width: 100%;
5786
5796
  overflow-y: auto;
5787
- border-radius: var(--radius-lg);
5797
+ border-radius: 0;
5788
5798
  border: 1px solid var(--border);
5789
5799
  }
5790
5800
 
@@ -6200,7 +6210,7 @@ em {
6200
6210
  flex-shrink: 0;
6201
6211
  padding-inline-start: var(--gap-md);
6202
6212
  padding-inline-end: var(--gap-md);
6203
- border-radius: var(--radius-md);
6213
+ border-radius: var(--radius-interactive);
6204
6214
  border: 1px solid var(--border);
6205
6215
  font-size: var(--font-size-sm);
6206
6216
  }
@@ -6357,7 +6367,7 @@ em {
6357
6367
  align-items: center;
6358
6368
  gap: 0;
6359
6369
  padding: 0.125rem;
6360
- border-radius: var(--radius);
6370
+ border-radius: var(--radius-interactive);
6361
6371
  background-color: var(--muted);
6362
6372
  border: var(--border-width) solid var(--border);
6363
6373
  }
@@ -6451,7 +6461,7 @@ em {
6451
6461
  box-shadow: var(--shadow-lg); /* Stronger shadow for visibility */
6452
6462
  padding: 0.375rem 0.5rem; /* 6px 8px - industry standard */
6453
6463
  font-size: var(--font-size-xs); /* 12px */
6454
- border-radius: 0; /* Square, modern look */
6464
+ border-radius: var(--radius-floating);
6455
6465
  max-width: 12.5rem; /* 200px */
6456
6466
  }
6457
6467
 
@@ -6529,6 +6539,16 @@ em {
6529
6539
  filter: drop-shadow(0 2px 8px rgb(from var(--background) r g b / 0.5));
6530
6540
  }
6531
6541
 
6542
+ /* Loading overlay - shown while iframe loads */
6543
+
6544
+ .dndev-video-loading-overlay {
6545
+ z-index: 1;
6546
+ }
6547
+
6548
+ .dndev-video-loading-overlay .dndev-video-play-overlay {
6549
+ background: rgb(from var(--background) r g b / 0.6);
6550
+ }
6551
+
6532
6552
  /* Modal dialog wrapper */
6533
6553
 
6534
6554
  .dndev-video-dialog {
@@ -7070,7 +7090,7 @@ em {
7070
7090
  }
7071
7091
 
7072
7092
  .dndev-section-full-width[data-tone='muted'] {
7073
- background: color-mix(in oklab, var(--muted) 50%, transparent);
7093
+ background: var(--muted);
7074
7094
  }
7075
7095
 
7076
7096
  .dndev-section-full-width[data-tone='elevated'] {
@@ -7093,7 +7113,7 @@ em {
7093
7113
  }
7094
7114
 
7095
7115
  [data-tone='muted']:not(.dndev-section-full-width) {
7096
- background: color-mix(in oklab, var(--muted) 50%, transparent);
7116
+ background: var(--muted);
7097
7117
  }
7098
7118
 
7099
7119
  [data-tone='elevated']:not(.dndev-section-full-width) {
@@ -7142,7 +7162,7 @@ code {
7142
7162
  line-height: 1.5;
7143
7163
  white-space: pre-wrap;
7144
7164
  word-break: break-all;
7145
- border-radius: var(--radius-sm);
7165
+ border-radius: var(--radius-interactive);
7146
7166
  }
7147
7167
 
7148
7168
  /* Code element + variant = semantic + visual (monospace + background) */
@@ -7157,7 +7177,7 @@ code[data-variant='code'] {
7157
7177
  line-height: 1.5;
7158
7178
  white-space: pre-wrap;
7159
7179
  word-break: break-all;
7160
- border-radius: var(--radius-sm);
7180
+ border-radius: var(--radius-interactive);
7161
7181
  }
7162
7182
 
7163
7183
  /* Heading + code variant = heading size/weight + code background */
@@ -7175,7 +7195,7 @@ h4[data-variant='code'] {
7175
7195
  line-height: 1.5;
7176
7196
  white-space: pre-wrap;
7177
7197
  word-break: break-all;
7178
- border-radius: var(--radius-sm);
7198
+ border-radius: var(--radius-interactive);
7179
7199
  }
7180
7200
 
7181
7201
  /* ===========================
@@ -7229,6 +7249,7 @@ h4[data-variant='code'] {
7229
7249
 
7230
7250
  .dndev-relative {
7231
7251
  position: relative;
7252
+ min-width: 0; /* Allow flex items to shrink below content size */
7232
7253
  }
7233
7254
 
7234
7255
  .dndev-absolute {
@@ -7640,7 +7661,7 @@ h4[data-variant='code'] {
7640
7661
  =========================== */
7641
7662
 
7642
7663
  /* Single animation type (fade, slide, or none to disable) - app-wide */
7643
- --routing-animation: fade;
7664
+ --routing-animation: none;
7644
7665
  --routing-default-duration: var(--dur-normal);
7645
7666
 
7646
7667
  /* Breakpoint-specific durations */
@@ -7720,24 +7741,26 @@ h4[data-variant='code'] {
7720
7741
 
7721
7742
  /* Routing animations - applied to main content area */
7722
7743
 
7744
+ /* Default: visible (progressive enhancement - content shows even if JS fails) */
7745
+
7723
7746
  main[role='main'] {
7724
- opacity: 0;
7747
+ opacity: 1;
7725
7748
  }
7726
7749
 
7727
- /* Fade animation */
7750
+ /* Fade animation - keyframes handle opacity 0→1 */
7728
7751
 
7729
7752
  main[role='main'][data-routing-animation='fade'] {
7730
7753
  animation: routeFadeIn var(--routing-default-duration, 300ms) ease-in forwards;
7731
7754
  }
7732
7755
 
7733
- /* Slide animation */
7756
+ /* Slide animation - keyframes handle opacity 0→1 */
7734
7757
 
7735
7758
  main[role='main'][data-routing-animation='slide'] {
7736
7759
  animation: routeSlideIn var(--routing-default-duration, 300ms) ease-in
7737
7760
  forwards;
7738
7761
  }
7739
7762
 
7740
- /* No animation */
7763
+ /* No animation - already visible by default, explicit for clarity */
7741
7764
 
7742
7765
  main[role='main'][data-routing-animation='none'] {
7743
7766
  animation: none;
@@ -8146,13 +8169,6 @@ aside.sidebar[role='navigation'] .dndev-interactive-label {
8146
8169
  justify-content: center;
8147
8170
  }
8148
8171
 
8149
- /* Sidebar navigation menu - 48px buttons/icons default */
8150
-
8151
- .dndev-sidebar-nav-menu[data-vertical='true'] .dndev-interactive[data-role='menu-item'],.dndev-sidebar-nav-menu[data-vertical='true'] .dndev-interactive[data-role='nav-trigger'] {
8152
- width: var(--touch-target);
8153
- height: var(--touch-target);
8154
- }
8155
-
8156
8172
  /* Collapsed sidebar: hide labels, center icons */
8157
8173
 
8158
8174
  /* Hide all auto-display labels */
@@ -8266,7 +8282,7 @@ footer[role='contentinfo'] > * {
8266
8282
 
8267
8283
  footer[role='contentinfo'] .footer-copyright {
8268
8284
  color: var(--muted-foreground);
8269
- font-size: var(--font-size-xs);
8285
+ font-size: var(--font-size-sm);
8270
8286
  }
8271
8287
 
8272
8288
  footer[role='contentinfo'] a:not(.dndev-interactive) {
@@ -8274,7 +8290,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive) {
8274
8290
  text-decoration: underline;
8275
8291
  text-underline-offset: 2px;
8276
8292
  color: var(--muted-foreground);
8277
- font-size: var(--font-size-xs);
8293
+ font-size: var(--font-size-sm);
8278
8294
  background: transparent;
8279
8295
  }
8280
8296
 
@@ -8673,6 +8689,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
8673
8689
  .dndev-container[data-centered='false'] {
8674
8690
  margin-inline-start: 0;
8675
8691
  margin-inline-end: 0;
8692
+ justify-content: flex-start;
8676
8693
  }
8677
8694
 
8678
8695
  /* Full width - no constraints */