@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
@@ -535,7 +535,7 @@ a:not(.dndev-interactive):active {
535
535
  a:focus-visible {
536
536
  outline: 2px solid var(--ring);
537
537
  outline-offset: 2px;
538
- border-radius: var(--radius-md);
538
+ border-radius: var(--radius-interactive);
539
539
  }
540
540
 
541
541
  /* ===========================
@@ -678,7 +678,7 @@ em {
678
678
  .dndev-input {
679
679
  display: flex;
680
680
  width: 100%;
681
- border-radius: 0;
681
+ border-radius: var(--radius-interactive);
682
682
  border: var(--border-hairline) solid var(--line-2);
683
683
  background-color: transparent;
684
684
  color: var(--foreground);
@@ -940,15 +940,21 @@ em {
940
940
 
941
941
  .dndev-surface[data-role='card'] {
942
942
  padding: var(--gap-md);
943
- border-radius: var(--radius-md);
943
+ border-radius: var(--radius-surface);
944
944
  }
945
945
 
946
946
  /* Elevated cards - stronger shadow */
947
947
 
948
- .dndev-surface[data-elevated='true'] {
948
+ /* Apply if elevated=true OR (clickable=true AND elevated!=false) */
949
+
950
+ .dndev-surface[data-elevated='true'],.dndev-surface[data-clickable='true']:not([data-elevated='false']) {
949
951
  box-shadow: var(--shadow-xl);
950
952
  }
951
953
 
954
+ :is(.dndev-surface[data-elevated='true'],.dndev-surface[data-clickable='true']:not([data-elevated='false'])):dir(rtl) {
955
+ box-shadow: var(--shadow-xl-rtl);
956
+ }
957
+
952
958
  /* Clickable cards - hover effects */
953
959
 
954
960
  .dndev-surface[data-clickable='true'] {
@@ -1181,7 +1187,7 @@ em {
1181
1187
 
1182
1188
  .dndev-floating[data-role='card'] {
1183
1189
  padding: var(--gap-md);
1184
- border-radius: var(--radius-md);
1190
+ border-radius: var(--radius-surface);
1185
1191
  }
1186
1192
 
1187
1193
  .dndev-floating[data-role='floating'] {
@@ -1643,6 +1649,38 @@ em {
1643
1649
  color: var(--background);
1644
1650
  }
1645
1651
 
1652
+ /* CONTROL GROUP - Shared pattern for grouped controls (RadioGroup, Checkbox groups) */
1653
+
1654
+ .dndev-control-group {
1655
+ display: grid;
1656
+ gap: var(--gap-md); /* 16px - standard spacing between grouped items */
1657
+
1658
+ /* Control + label pattern - used by RadioGroup, CheckboxFieldComponent, etc. */
1659
+ }
1660
+
1661
+ .dndev-control-group label {
1662
+ display: flex;
1663
+ align-items: center;
1664
+ gap: var(--gap-sm); /* 8px - spacing between control and label */
1665
+ font-size: var(--font-size-base);
1666
+ color: var(--foreground);
1667
+ cursor: pointer;
1668
+ transition: color var(--transition-fast);
1669
+
1670
+ /* Subtle hover on label text */
1671
+ }
1672
+
1673
+ :is(.dndev-control-group label):hover {
1674
+ color: var(--primary);
1675
+ }
1676
+
1677
+ /* Selected state - label color changes */
1678
+
1679
+ :is(.dndev-control-group label):has([data-state='checked']),:is(.dndev-control-group label):has([data-state='on']) {
1680
+ color: var(--primary);
1681
+ font-weight: var(--font-weight-medium);
1682
+ }
1683
+
1646
1684
  /**
1647
1685
  * Variant system - 8 control variants
1648
1686
  * Variants override --control-border to use semantic colors
@@ -1650,37 +1688,37 @@ em {
1650
1688
  * On state: fills with variant color
1651
1689
  */
1652
1690
 
1653
- .dndev-control[data-variant='primary'] {
1691
+ .dndev-control-group[data-variant='primary'] {
1654
1692
  --control-border: var(--primary);
1655
1693
  }
1656
1694
 
1657
- .dndev-control[data-variant='secondary'] {
1695
+ .dndev-control-group[data-variant='secondary'] {
1658
1696
  --control-border: var(--secondary);
1659
1697
  }
1660
1698
 
1661
- .dndev-control[data-variant='muted'] {
1699
+ .dndev-control-group[data-variant='muted'] {
1662
1700
  --control-border: var(--muted-foreground);
1663
1701
  }
1664
1702
 
1665
- .dndev-control[data-variant='accent'] {
1703
+ .dndev-control-group[data-variant='accent'] {
1666
1704
  --control-border: var(--accent);
1667
1705
  }
1668
1706
 
1669
- .dndev-control[data-variant='success'] {
1707
+ .dndev-control-group[data-variant='success'] {
1670
1708
  --control-border: var(--success);
1671
1709
  }
1672
1710
 
1673
- .dndev-control[data-variant='warning'] {
1711
+ .dndev-control-group[data-variant='warning'] {
1674
1712
  --control-border: var(--warning);
1675
1713
  }
1676
1714
 
1677
- .dndev-control[data-variant='destructive'] {
1715
+ .dndev-control-group[data-variant='destructive'] {
1678
1716
  --control-border: var(--destructive);
1679
1717
  }
1680
1718
 
1681
1719
  /* Default variant explicitly (same as base) */
1682
1720
 
1683
- .dndev-control[data-variant='default'] {
1721
+ .dndev-control-group[data-variant='default'] {
1684
1722
  --control-border: color-mix(
1685
1723
  in oklab,
1686
1724
  var(--foreground) 70%,
@@ -1768,7 +1806,7 @@ em {
1768
1806
  display: grid;
1769
1807
  gap: var(--gap-sm);
1770
1808
  padding: var(--gap-md);
1771
- border-radius: var(--radius-none);
1809
+ border-radius: var(--radius-floating);
1772
1810
  border: var(--border-hairline) solid var(--border);
1773
1811
  /* Inverted floating colors: popover-foreground as background, popover as foreground */
1774
1812
  background: color-mix(in oklab, var(--popover-foreground) 95%, transparent);
@@ -1913,7 +1951,7 @@ em {
1913
1951
  width: var(--icon-md);
1914
1952
  height: var(--icon-md);
1915
1953
  border: 2px solid currentColor;
1916
- border-radius: 50%;
1954
+ border-radius: var(--radius-full);
1917
1955
  border-right-color: transparent;
1918
1956
  animation: spin 1s linear infinite;
1919
1957
  }
@@ -2050,7 +2088,7 @@ em {
2050
2088
  display: flex;
2051
2089
  flex-direction: column;
2052
2090
  padding: 0;
2053
- border-radius: 0;
2091
+ border-radius: var(--radius-floating);
2054
2092
  min-width: 15ch; /* Character-based: scales with font size, ensures readable width */
2055
2093
  width: -moz-fit-content;
2056
2094
  width: fit-content; /* Stretch to fit children */
@@ -2404,7 +2442,7 @@ em {
2404
2442
  }
2405
2443
 
2406
2444
  .dndev-blockquote-content {
2407
- font-size: 1.125em; /* 1.125x body (18px on 16px base) */
2445
+ font-size: var(--font-size-lg); /* 20px - emphasized text */
2408
2446
  line-height: 1.7; /* Industry standard for readability */
2409
2447
  font-weight: 400;
2410
2448
  color: inherit;
@@ -2438,10 +2476,14 @@ em {
2438
2476
  */
2439
2477
 
2440
2478
  .dndev-blockquote[data-variant='default'] blockquote {
2441
- padding: var(--gap-md) var(--gap-md) var(--gap-md) var(--gap-lg);
2479
+ padding: var(--gap-md) calc(var(--gap-md) + 4px) var(--gap-md) var(--gap-lg);
2442
2480
  background: var(--muted);
2443
2481
  border-inline-start: 4px solid var(--primary);
2444
- border-radius: 0 var(--radius-md) var(--radius-md) 0;
2482
+ border-inline-end: none;
2483
+ border-block-start: none;
2484
+ border-block-end: none;
2485
+ border-radius: var(--radius-interactive) var(--radius-surface) var(--radius-surface) var(--radius-interactive);
2486
+ overflow: hidden;
2445
2487
  }
2446
2488
 
2447
2489
  .dndev-blockquote[data-variant='default'] .dndev-blockquote-content {
@@ -2462,7 +2504,7 @@ em {
2462
2504
  .dndev-blockquote[data-variant='editorial'] .dndev-blockquote-content {
2463
2505
  font-family: Georgia, 'Times New Roman', serif;
2464
2506
  font-style: italic;
2465
- font-size: 1.25em; /* Larger for editorial impact */
2507
+ font-size: var(--font-size-xl); /* 25px - larger for editorial impact */
2466
2508
  color: inherit;
2467
2509
  opacity: 0.95;
2468
2510
  }
@@ -2480,7 +2522,7 @@ em {
2480
2522
  .dndev-blockquote[data-variant='testimonial'] {
2481
2523
  background: var(--card);
2482
2524
  border: 1px solid var(--border);
2483
- border-radius: var(--radius-lg);
2525
+ border-radius: var(--radius-surface);
2484
2526
  padding: calc(var(--gap-lg) + var(--gap-md)); /* 2.5rem */
2485
2527
  box-shadow:
2486
2528
  0 1px 3px 0 hsl(var(--foreground-hsl) / 0.1),
@@ -2522,11 +2564,11 @@ em {
2522
2564
  }
2523
2565
 
2524
2566
  .dndev-blockquote-content {
2525
- font-size: 1.0625em; /* Slightly smaller on mobile (17px) */
2567
+ font-size: var(--font-size-base); /* Slightly smaller on mobile */
2526
2568
  }
2527
2569
 
2528
2570
  .dndev-blockquote[data-variant='editorial'] .dndev-blockquote-content {
2529
- font-size: 1.125em;
2571
+ font-size: var(--font-size-lg);
2530
2572
  }
2531
2573
 
2532
2574
  .dndev-blockquote[data-variant='testimonial'] {
@@ -2556,7 +2598,7 @@ em {
2556
2598
  color: var(--popover-foreground);
2557
2599
  background: var(--popover);
2558
2600
  border: var(--border-hairline) solid var(--border);
2559
- border-radius: var(--radius-interactive);
2601
+ border-radius: var(--radius-floating);
2560
2602
  box-shadow: var(--shadow-md);
2561
2603
  }
2562
2604
 
@@ -3334,7 +3376,7 @@ em {
3334
3376
 
3335
3377
  .dndev-command-footer-key {
3336
3378
  padding: 0.125rem 0.375rem;
3337
- border-radius: calc(var(--radius-md) * 0.5);
3379
+ border-radius: 2px;
3338
3380
  background: var(--muted);
3339
3381
  border: 1px solid var(--border);
3340
3382
  font-family: var(--font-mono);
@@ -3656,55 +3698,7 @@ em {
3656
3698
  width: 100%;
3657
3699
  }
3658
3700
 
3659
- /* Columns */
3660
-
3661
- .dndev-grid-component[data-cols='1'] {
3662
- grid-template-columns: repeat(1, minmax(0, 1fr));
3663
- }
3664
-
3665
- .dndev-grid-component[data-cols='2'] {
3666
- grid-template-columns: repeat(2, minmax(0, 1fr));
3667
- }
3668
-
3669
- .dndev-grid-component[data-cols='3'] {
3670
- grid-template-columns: repeat(3, minmax(0, 1fr));
3671
- }
3672
-
3673
- .dndev-grid-component[data-cols='4'] {
3674
- grid-template-columns: repeat(4, minmax(0, 1fr));
3675
- }
3676
-
3677
- .dndev-grid-component[data-cols='5'] {
3678
- grid-template-columns: repeat(5, minmax(0, 1fr));
3679
- }
3680
-
3681
- .dndev-grid-component[data-cols='6'] {
3682
- grid-template-columns: repeat(6, minmax(0, 1fr));
3683
- }
3684
-
3685
- .dndev-grid-component[data-cols='10'] {
3686
- grid-template-columns: repeat(10, minmax(0, 1fr));
3687
- }
3688
-
3689
- .dndev-grid-component[data-cols='12'] {
3690
- grid-template-columns: repeat(12, minmax(0, 1fr));
3691
- }
3692
-
3693
- /* Auto-fit/fill columns */
3694
-
3695
- .dndev-grid-component[data-cols='auto-fit'] {
3696
- grid-template-columns: repeat(
3697
- auto-fit,
3698
- minmax(min(100%, var(--min-col-width, 250px)), 1fr)
3699
- );
3700
- }
3701
-
3702
- .dndev-grid-component[data-cols='auto-fill'] {
3703
- grid-template-columns: repeat(
3704
- auto-fill,
3705
- minmax(min(100%, var(--min-col-width, 250px)), 1fr)
3706
- );
3707
- }
3701
+ /* Grid template columns are set via inline styles for maximum flexibility */
3708
3702
 
3709
3703
  /* Spacing from CSS variables */
3710
3704
 
@@ -3882,7 +3876,7 @@ em {
3882
3876
  height: var(--touch-target);
3883
3877
  padding: 0;
3884
3878
  border: 1px solid var(--card-foreground);
3885
- border-radius: var(--radius-md);
3879
+ border-radius: var(--radius-surface);
3886
3880
  background: transparent;
3887
3881
  display: inline-flex;
3888
3882
  align-items: center;
@@ -4022,7 +4016,7 @@ em {
4022
4016
 
4023
4017
  .dndev-json-viewer-container {
4024
4018
  background-color: var(--muted);
4025
- border-radius: var(--radius);
4019
+ border-radius: var(--radius-surface);
4026
4020
  padding: 1rem;
4027
4021
  overflow: auto;
4028
4022
  max-height: 600px;
@@ -4079,7 +4073,7 @@ em {
4079
4073
  align-items: flex-start;
4080
4074
  gap: 0.25rem;
4081
4075
  cursor: pointer;
4082
- border-radius: var(--radius-sm);
4076
+ border-radius: var(--radius-interactive);
4083
4077
  padding-inline-start: 0.25rem;
4084
4078
  padding-inline-end: 0.25rem;
4085
4079
  margin-inline-start: -0.25rem;
@@ -4440,7 +4434,7 @@ em {
4440
4434
  grid-row: span 3;
4441
4435
  height: 100%;
4442
4436
  padding: var(--gap-md);
4443
- border-radius: var(--radius);
4437
+ border-radius: var(--radius-floating);
4444
4438
  background: linear-gradient(
4445
4439
  to bottom,
4446
4440
  color-mix(in oklab, var(--muted) 50%, transparent),
@@ -4464,7 +4458,7 @@ em {
4464
4458
 
4465
4459
  .dndev-nav-menu-item-container {
4466
4460
  padding: var(--gap-md);
4467
- border-radius: var(--radius);
4461
+ border-radius: var(--radius-floating);
4468
4462
  text-decoration: none;
4469
4463
  outline: none;
4470
4464
  }
@@ -4599,27 +4593,37 @@ em {
4599
4593
 
4600
4594
  /* packages/components/src/atomic/RadioGroup/RadioGroup.css */
4601
4595
 
4602
- .dndev-radio-group {
4603
- display: grid;
4604
- gap: var(--gap-sm);
4596
+ /* Uses shared .dndev-control-group pattern from patterns.css */
4605
4597
 
4606
- /* RadioGroup label styling - Stack as="label" now has dndev-text-base */
4607
- }
4598
+ /* Root is display: grid - items are direct children */
4608
4599
 
4609
- .dndev-radio-group label {
4610
- font-size: var(--font-size-base);
4611
- color: var(--foreground);
4612
- transition: color var(--dur-fast) var(--ease-in-out);
4600
+ /* Grid columns via data-cols attribute */
4613
4601
 
4614
- /* Label text when radio is checked */
4602
+ .dndev-radio-group[data-cols] {
4603
+ width: -moz-fit-content;
4604
+ width: fit-content;
4605
+ margin-inline: auto; /* Self-center in parent */
4615
4606
  }
4616
4607
 
4617
- :is(.dndev-radio-group label):has([data-state='checked']) {
4618
- color: var(--primary);
4619
- font-weight: var(--font-weight-medium);
4620
- }
4608
+ .dndev-radio-group[data-cols='2'] { grid-template-columns: repeat(2, auto); }
4609
+
4610
+ .dndev-radio-group[data-cols='3'] { grid-template-columns: repeat(3, auto); }
4611
+
4612
+ .dndev-radio-group[data-cols='4'] { grid-template-columns: repeat(4, auto); }
4613
+
4614
+ .dndev-radio-group[data-cols='5'] { grid-template-columns: repeat(5, auto); }
4615
+
4616
+ .dndev-radio-group[data-cols='6'] { grid-template-columns: repeat(6, auto); }
4621
4617
 
4622
- /* Variant colors for checked labels */
4618
+ .dndev-radio-group[data-cols='10'] { grid-template-columns: repeat(10, auto); }
4619
+
4620
+ .dndev-radio-group[data-cols='12'] { grid-template-columns: repeat(12, auto); }
4621
+
4622
+ .dndev-radio-group[data-cols='auto-fit'] { grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr)); width: 100%; }
4623
+
4624
+ .dndev-radio-group[data-cols='auto-fill'] { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); width: 100%; }
4625
+
4626
+ /* Variant colors for checked labels - override base pattern */
4623
4627
 
4624
4628
  .dndev-radio-group[data-variant='primary'] label:has([data-state='checked']) {
4625
4629
  color: var(--primary);
@@ -4862,6 +4866,12 @@ em {
4862
4866
 
4863
4867
  /* packages/components/src/atomic/Section/Section.css */
4864
4868
 
4869
+ /* Full-width section wrapper for tone backgrounds */
4870
+
4871
+ .dndev-section-full-width {
4872
+ width: 100%;
4873
+ }
4874
+
4865
4875
  /* Content wrapper: constrained + centered + padded */
4866
4876
 
4867
4877
  .dndev-section-content {
@@ -4881,11 +4891,11 @@ em {
4881
4891
  }
4882
4892
  }
4883
4893
 
4884
- /* Section title: XL, uppercase, accent, tracking */
4894
+ /* Section title: LG, uppercase, accent pop color, tracking */
4885
4895
 
4886
4896
  .dndev-section-title {
4887
4897
  display: block;
4888
- font-size: var(--font-size-xl);
4898
+ font-size: var(--font-size-lg);
4889
4899
  font-weight: var(--font-weight-semibold);
4890
4900
  text-transform: uppercase;
4891
4901
  letter-spacing: 0.2em;
@@ -5326,7 +5336,7 @@ em {
5326
5336
  color: var(--foreground);
5327
5337
  background-color: var(--background);
5328
5338
  padding: 0.125rem 0.375rem;
5329
- border-radius: var(--radius);
5339
+ border-radius: var(--radius-interactive);
5330
5340
  box-shadow: var(--shadow-sm);
5331
5341
  white-space: nowrap;
5332
5342
  pointer-events: none;
@@ -5780,7 +5790,7 @@ em {
5780
5790
  position: relative;
5781
5791
  width: 100%;
5782
5792
  overflow-y: auto;
5783
- border-radius: var(--radius-lg);
5793
+ border-radius: 0;
5784
5794
  border: 1px solid var(--border);
5785
5795
  }
5786
5796
 
@@ -6196,7 +6206,7 @@ em {
6196
6206
  flex-shrink: 0;
6197
6207
  padding-inline-start: var(--gap-md);
6198
6208
  padding-inline-end: var(--gap-md);
6199
- border-radius: var(--radius-md);
6209
+ border-radius: var(--radius-interactive);
6200
6210
  border: 1px solid var(--border);
6201
6211
  font-size: var(--font-size-sm);
6202
6212
  }
@@ -6353,7 +6363,7 @@ em {
6353
6363
  align-items: center;
6354
6364
  gap: 0;
6355
6365
  padding: 0.125rem;
6356
- border-radius: var(--radius);
6366
+ border-radius: var(--radius-interactive);
6357
6367
  background-color: var(--muted);
6358
6368
  border: var(--border-width) solid var(--border);
6359
6369
  }
@@ -6447,7 +6457,7 @@ em {
6447
6457
  box-shadow: var(--shadow-lg); /* Stronger shadow for visibility */
6448
6458
  padding: 0.375rem 0.5rem; /* 6px 8px - industry standard */
6449
6459
  font-size: var(--font-size-xs); /* 12px */
6450
- border-radius: 0; /* Square, modern look */
6460
+ border-radius: var(--radius-floating);
6451
6461
  max-width: 12.5rem; /* 200px */
6452
6462
  }
6453
6463
 
@@ -6525,6 +6535,16 @@ em {
6525
6535
  filter: drop-shadow(0 2px 8px rgb(from var(--background) r g b / 0.5));
6526
6536
  }
6527
6537
 
6538
+ /* Loading overlay - shown while iframe loads */
6539
+
6540
+ .dndev-video-loading-overlay {
6541
+ z-index: 1;
6542
+ }
6543
+
6544
+ .dndev-video-loading-overlay .dndev-video-play-overlay {
6545
+ background: rgb(from var(--background) r g b / 0.6);
6546
+ }
6547
+
6528
6548
  /* Modal dialog wrapper */
6529
6549
 
6530
6550
  .dndev-video-dialog {
@@ -7066,7 +7086,7 @@ em {
7066
7086
  }
7067
7087
 
7068
7088
  .dndev-section-full-width[data-tone='muted'] {
7069
- background: color-mix(in oklab, var(--muted) 50%, transparent);
7089
+ background: var(--muted);
7070
7090
  }
7071
7091
 
7072
7092
  .dndev-section-full-width[data-tone='elevated'] {
@@ -7089,7 +7109,7 @@ em {
7089
7109
  }
7090
7110
 
7091
7111
  [data-tone='muted']:not(.dndev-section-full-width) {
7092
- background: color-mix(in oklab, var(--muted) 50%, transparent);
7112
+ background: var(--muted);
7093
7113
  }
7094
7114
 
7095
7115
  [data-tone='elevated']:not(.dndev-section-full-width) {
@@ -7138,7 +7158,7 @@ code {
7138
7158
  line-height: 1.5;
7139
7159
  white-space: pre-wrap;
7140
7160
  word-break: break-all;
7141
- border-radius: var(--radius-sm);
7161
+ border-radius: var(--radius-interactive);
7142
7162
  }
7143
7163
 
7144
7164
  /* Code element + variant = semantic + visual (monospace + background) */
@@ -7153,7 +7173,7 @@ code[data-variant='code'] {
7153
7173
  line-height: 1.5;
7154
7174
  white-space: pre-wrap;
7155
7175
  word-break: break-all;
7156
- border-radius: var(--radius-sm);
7176
+ border-radius: var(--radius-interactive);
7157
7177
  }
7158
7178
 
7159
7179
  /* Heading + code variant = heading size/weight + code background */
@@ -7171,7 +7191,7 @@ h4[data-variant='code'] {
7171
7191
  line-height: 1.5;
7172
7192
  white-space: pre-wrap;
7173
7193
  word-break: break-all;
7174
- border-radius: var(--radius-sm);
7194
+ border-radius: var(--radius-interactive);
7175
7195
  }
7176
7196
 
7177
7197
  /* ===========================
@@ -7225,6 +7245,7 @@ h4[data-variant='code'] {
7225
7245
 
7226
7246
  .dndev-relative {
7227
7247
  position: relative;
7248
+ min-width: 0; /* Allow flex items to shrink below content size */
7228
7249
  }
7229
7250
 
7230
7251
  .dndev-absolute {
@@ -7636,7 +7657,7 @@ h4[data-variant='code'] {
7636
7657
  =========================== */
7637
7658
 
7638
7659
  /* Single animation type (fade, slide, or none to disable) - app-wide */
7639
- --routing-animation: fade;
7660
+ --routing-animation: none;
7640
7661
  --routing-default-duration: var(--dur-normal);
7641
7662
 
7642
7663
  /* Breakpoint-specific durations */
@@ -7716,24 +7737,26 @@ h4[data-variant='code'] {
7716
7737
 
7717
7738
  /* Routing animations - applied to main content area */
7718
7739
 
7740
+ /* Default: visible (progressive enhancement - content shows even if JS fails) */
7741
+
7719
7742
  main[role='main'] {
7720
- opacity: 0;
7743
+ opacity: 1;
7721
7744
  }
7722
7745
 
7723
- /* Fade animation */
7746
+ /* Fade animation - keyframes handle opacity 0→1 */
7724
7747
 
7725
7748
  main[role='main'][data-routing-animation='fade'] {
7726
7749
  animation: routeFadeIn var(--routing-default-duration, 300ms) ease-in forwards;
7727
7750
  }
7728
7751
 
7729
- /* Slide animation */
7752
+ /* Slide animation - keyframes handle opacity 0→1 */
7730
7753
 
7731
7754
  main[role='main'][data-routing-animation='slide'] {
7732
7755
  animation: routeSlideIn var(--routing-default-duration, 300ms) ease-in
7733
7756
  forwards;
7734
7757
  }
7735
7758
 
7736
- /* No animation */
7759
+ /* No animation - already visible by default, explicit for clarity */
7737
7760
 
7738
7761
  main[role='main'][data-routing-animation='none'] {
7739
7762
  animation: none;
@@ -8142,13 +8165,6 @@ aside.sidebar[role='navigation'] .dndev-interactive-label {
8142
8165
  justify-content: center;
8143
8166
  }
8144
8167
 
8145
- /* Sidebar navigation menu - 48px buttons/icons default */
8146
-
8147
- .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'] {
8148
- width: var(--touch-target);
8149
- height: var(--touch-target);
8150
- }
8151
-
8152
8168
  /* Collapsed sidebar: hide labels, center icons */
8153
8169
 
8154
8170
  /* Hide all auto-display labels */
@@ -8262,7 +8278,7 @@ footer[role='contentinfo'] > * {
8262
8278
 
8263
8279
  footer[role='contentinfo'] .footer-copyright {
8264
8280
  color: var(--muted-foreground);
8265
- font-size: var(--font-size-xs);
8281
+ font-size: var(--font-size-sm);
8266
8282
  }
8267
8283
 
8268
8284
  footer[role='contentinfo'] a:not(.dndev-interactive) {
@@ -8270,7 +8286,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive) {
8270
8286
  text-decoration: underline;
8271
8287
  text-underline-offset: 2px;
8272
8288
  color: var(--muted-foreground);
8273
- font-size: var(--font-size-xs);
8289
+ font-size: var(--font-size-sm);
8274
8290
  background: transparent;
8275
8291
  }
8276
8292
 
@@ -8669,6 +8685,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
8669
8685
  .dndev-container[data-centered='false'] {
8670
8686
  margin-inline-start: 0;
8671
8687
  margin-inline-end: 0;
8688
+ justify-content: flex-start;
8672
8689
  }
8673
8690
 
8674
8691
  /* Full width - no constraints */
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Asset formats interface
3
3
  *
4
- * @version 0.0.1
4
+ * @version 0.0.3
5
5
  * @since 0.0.1
6
6
  * @author AMBROISE PARK Consulting
7
7
  */
@@ -14,7 +14,7 @@ export interface AssetFormats {
14
14
  /**
15
15
  * Favicon set interface
16
16
  *
17
- * @version 0.0.1
17
+ * @version 0.0.3
18
18
  * @since 0.0.1
19
19
  * @author AMBROISE PARK Consulting
20
20
  */
@@ -58,7 +58,7 @@ interface AssetManifest {
58
58
  * Modern asset resolution with format preference and browser capability detection
59
59
  * Follows Next.js Image optimization patterns
60
60
  *
61
- * @version 0.0.1
61
+ * @version 0.0.3
62
62
  * @since 0.0.1
63
63
  * @author AMBROISE PARK Consulting
64
64
  */
@@ -126,7 +126,7 @@ export declare class AssetResolver {
126
126
  /**
127
127
  * Utility function for logo resolution
128
128
  *
129
- * @version 0.0.1
129
+ * @version 0.0.3
130
130
  * @since 0.0.1
131
131
  * @author AMBROISE PARK Consulting
132
132
  */
@@ -134,7 +134,7 @@ export declare function resolveLogo(customPath?: string): string;
134
134
  /**
135
135
  * Utility function for favicon resolution
136
136
  *
137
- * @version 0.0.1
137
+ * @version 0.0.3
138
138
  * @since 0.0.1
139
139
  * @author AMBROISE PARK Consulting
140
140
  */
@@ -3,7 +3,7 @@
3
3
  * @fileoverview Modern asset resolution system for DoNotDev
4
4
  * @description Handles logo and favicon resolution with format preferences and fallbacks
5
5
  *
6
- * @version 0.0.1
6
+ * @version 0.0.3
7
7
  * @since 0.0.1
8
8
  * @author AMBROISE PARK Consulting
9
9
  */
@@ -14,7 +14,7 @@ import { getDndevConfig, isClient, isDev } from '@donotdev/core';
14
14
  * Modern asset resolution with format preference and browser capability detection
15
15
  * Follows Next.js Image optimization patterns
16
16
  *
17
- * @version 0.0.1
17
+ * @version 0.0.3
18
18
  * @since 0.0.1
19
19
  * @author AMBROISE PARK Consulting
20
20
  */
@@ -248,7 +248,7 @@ export class AssetResolver {
248
248
  /**
249
249
  * Utility function for logo resolution
250
250
  *
251
- * @version 0.0.1
251
+ * @version 0.0.3
252
252
  * @since 0.0.1
253
253
  * @author AMBROISE PARK Consulting
254
254
  */
@@ -258,7 +258,7 @@ export function resolveLogo(customPath) {
258
258
  /**
259
259
  * Utility function for favicon resolution
260
260
  *
261
- * @version 0.0.1
261
+ * @version 0.0.3
262
262
  * @since 0.0.1
263
263
  * @author AMBROISE PARK Consulting
264
264
  */