@umituz/web-dashboard 6.1.0 → 6.2.1

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 (135) hide show
  1. package/README.md +47 -73
  2. package/package.json +5 -9
  3. package/src/config/DashboardConfig.ts +19 -68
  4. package/src/domains/analytics/components/index.ts +0 -6
  5. package/src/domains/analytics/hooks/index.ts +0 -6
  6. package/src/domains/analytics/hooks/useAnalytics.ts +2 -20
  7. package/src/domains/analytics/index.ts +0 -10
  8. package/src/domains/analytics/services/AnalyticsEngineService.ts +7 -74
  9. package/src/domains/analytics/services/PerformanceService.ts +27 -138
  10. package/src/domains/analytics/services/index.ts +0 -4
  11. package/src/domains/analytics/types/analytics.ts +100 -270
  12. package/src/domains/analytics/types/index.ts +0 -6
  13. package/src/domains/analytics/utils/analytics.test.ts +2 -9
  14. package/src/domains/analytics/utils/analytics.ts +1 -22
  15. package/src/domains/analytics/utils/index.ts +0 -6
  16. package/src/domains/calendar/config.ts +0 -7
  17. package/src/domains/calendar/hooks/index.ts +0 -4
  18. package/src/domains/calendar/hooks/useCalendar.ts +7 -27
  19. package/src/domains/calendar/index.ts +0 -4
  20. package/src/domains/calendar/services/CalendarService.ts +0 -21
  21. package/src/domains/calendar/services/index.ts +0 -4
  22. package/src/domains/calendar/types/calendar.types.ts +9 -53
  23. package/src/domains/calendar/utils/contentItemMapper.test.ts +0 -4
  24. package/src/domains/calendar/utils/contentItemMapper.ts +0 -31
  25. package/src/domains/calendar/utils/index.ts +0 -26
  26. package/src/domains/layouts/components/index.ts +0 -4
  27. package/src/domains/layouts/hooks/dashboard.ts +0 -21
  28. package/src/domains/layouts/hooks/index.ts +0 -4
  29. package/src/domains/layouts/index.ts +0 -6
  30. package/src/domains/layouts/theme/default.ts +0 -12
  31. package/src/domains/layouts/theme/index.ts +0 -4
  32. package/src/domains/layouts/theme/presets.ts +0 -9
  33. package/src/domains/layouts/theme/utils.ts +0 -15
  34. package/src/domains/layouts/types/index.ts +0 -4
  35. package/src/domains/layouts/types/layout.ts +18 -56
  36. package/src/domains/layouts/types/notification.ts +4 -17
  37. package/src/domains/layouts/types/sidebar.ts +8 -28
  38. package/src/domains/layouts/types/theme.ts +23 -59
  39. package/src/domains/layouts/types/user.ts +9 -30
  40. package/src/domains/layouts/utils/dashboard.ts +4 -48
  41. package/src/domains/layouts/utils/index.ts +0 -4
  42. package/src/domains/modules/build.tsx +2 -16
  43. package/src/domains/modules/types.ts +8 -23
  44. package/src/domains/onboarding/calc/calc.test.ts +1 -9
  45. package/src/domains/onboarding/calc/card-stack-motion-curve.ts +0 -6
  46. package/src/domains/onboarding/calc/count-with-locale.ts +0 -8
  47. package/src/domains/onboarding/calc/duration-equal-split.ts +0 -12
  48. package/src/domains/onboarding/calc/elapsed-millis.ts +0 -6
  49. package/src/domains/onboarding/calc/progress-percentage.ts +1 -11
  50. package/src/domains/onboarding/calc/slider-value-bounds.ts +1 -11
  51. package/src/domains/onboarding/calc/step-index-clamp.ts +0 -9
  52. package/src/domains/onboarding/calc/swipe-gesture-curve.ts +0 -13
  53. package/src/domains/onboarding/components/{shared/AnimationWrapper.tsx → AnimationWrapper.tsx} +0 -4
  54. package/src/domains/onboarding/components/{shared/OnboardingErrorBoundary.tsx → OnboardingErrorBoundary.tsx} +7 -27
  55. package/src/domains/onboarding/components/OnboardingFlow.test.tsx +8 -30
  56. package/src/domains/onboarding/components/OnboardingFlow.tsx +13 -61
  57. package/src/domains/onboarding/components/OnboardingIntl.tsx +1 -11
  58. package/src/domains/onboarding/components/PrimaryButton.tsx +40 -0
  59. package/src/domains/onboarding/components/ProgressBar.tsx +32 -0
  60. package/src/domains/onboarding/components/QuestionWrapper.tsx +28 -0
  61. package/src/domains/onboarding/components/ScreenContainer.tsx +19 -0
  62. package/src/domains/onboarding/components/{shared/SwipeCard.test.tsx → SwipeCard.test.tsx} +1 -3
  63. package/src/domains/onboarding/components/{shared/SwipeCard.tsx → SwipeCard.tsx} +10 -28
  64. package/src/domains/onboarding/components/renderBundledIcon.tsx +7 -0
  65. package/src/domains/onboarding/components/screens/AccountGateScreen.tsx +7 -17
  66. package/src/domains/onboarding/components/screens/AppDemoScreen.tsx +4 -10
  67. package/src/domains/onboarding/components/screens/ComparisonScreen.tsx +12 -22
  68. package/src/domains/onboarding/components/screens/GoalQuestionScreen.tsx +9 -6
  69. package/src/domains/onboarding/components/screens/PainPointsScreen.tsx +10 -10
  70. package/src/domains/onboarding/components/screens/PaywallScreen.tsx +22 -38
  71. package/src/domains/onboarding/components/screens/PermissionPrimingScreen.tsx +14 -29
  72. package/src/domains/onboarding/components/screens/PersonalizedSolutionScreen.tsx +10 -23
  73. package/src/domains/onboarding/components/screens/PreferencesScreen.tsx +13 -27
  74. package/src/domains/onboarding/components/screens/ProcessingScreen.tsx +11 -27
  75. package/src/domains/onboarding/components/screens/SocialProofScreen.tsx +22 -51
  76. package/src/domains/onboarding/components/screens/TinderCardsScreen.tsx +13 -30
  77. package/src/domains/onboarding/components/screens/ValueDeliveryScreen.tsx +13 -29
  78. package/src/domains/onboarding/components/screens/WelcomeScreen.tsx +12 -32
  79. package/src/domains/onboarding/{components/hooks → hooks}/useOnboardingAnalytics.test.tsx +1 -1
  80. package/src/domains/onboarding/{components/hooks → hooks}/useOnboardingAnalytics.ts +3 -16
  81. package/src/domains/onboarding/{components/hooks → hooks}/useOnboardingProgress.test.tsx +2 -2
  82. package/src/domains/onboarding/{components/hooks → hooks}/useOnboardingProgress.ts +10 -21
  83. package/src/domains/onboarding/{components/hooks → hooks}/usePermissionPriming.ts +3 -10
  84. package/src/domains/onboarding/{components/hooks → hooks}/useReducedMotion.ts +0 -5
  85. package/src/domains/onboarding/index.ts +16 -45
  86. package/src/domains/onboarding/predicates/has-handler.ts +0 -4
  87. package/src/domains/onboarding/predicates/icon-name-resolves.ts +1 -17
  88. package/src/domains/onboarding/predicates/permission-granted.ts +0 -5
  89. package/src/domains/onboarding/predicates/permission-supports.ts +1 -11
  90. package/src/domains/onboarding/predicates/predicates.test.ts +6 -20
  91. package/src/domains/onboarding/predicates/screen-emits-data.ts +0 -4
  92. package/src/domains/onboarding/predicates/storage-available.ts +0 -8
  93. package/src/domains/onboarding/templates/TemplateDemoFallback.tsx +19 -39
  94. package/src/domains/onboarding/templates/art-onboarding.ts +1 -11
  95. package/src/domains/onboarding/templates/health-onboarding.ts +0 -5
  96. package/src/domains/onboarding/templates/platform-onboarding.ts +0 -9
  97. package/src/domains/onboarding/templates/video-onboarding.ts +0 -5
  98. package/src/domains/onboarding/test/setup.ts +1 -8
  99. package/src/domains/onboarding/types/config.ts +7 -18
  100. package/src/domains/onboarding/types/labels.ts +25 -59
  101. package/src/domains/onboarding/types/screens.ts +3 -11
  102. package/src/domains/onboarding/utils/analytics-dispatch.ts +2 -21
  103. package/src/domains/onboarding/utils/default-storage-key.ts +0 -1
  104. package/src/domains/onboarding/utils/index.ts +0 -1
  105. package/src/domains/onboarding/utils/local-storage-bridge.ts +1 -21
  106. package/src/domains/onboarding/utils/permission-bridge.ts +0 -8
  107. package/src/domains/onboarding/validation/flow-structure-check.ts +0 -6
  108. package/src/domains/onboarding/validation/permission-status-check.ts +0 -5
  109. package/src/domains/onboarding/validation/screen-config-check.ts +0 -5
  110. package/src/domains/onboarding/validation/stored-progress-check.ts +1 -10
  111. package/src/domains/onboarding/validation/validation.test.ts +1 -6
  112. package/src/domains/permissions/hasPermission.ts +0 -8
  113. package/src/domains/permissions/types.ts +0 -20
  114. package/src/domains/settings/components/index.ts +0 -4
  115. package/src/domains/settings/hooks/index.ts +0 -4
  116. package/src/domains/settings/hooks/useSettings.ts +1 -26
  117. package/src/domains/settings/index.ts +0 -6
  118. package/src/domains/settings/types/index.ts +0 -4
  119. package/src/domains/settings/types/settings.ts +23 -67
  120. package/src/domains/settings/utils/index.ts +0 -4
  121. package/src/domains/settings/utils/settings.ts +0 -45
  122. package/src/styles/dashboard.css +818 -2
  123. package/src/domains/onboarding/components/shared/OptionCard.tsx +0 -73
  124. package/src/domains/onboarding/components/shared/PrimaryButton.tsx +0 -58
  125. package/src/domains/onboarding/components/shared/ProgressBar.tsx +0 -51
  126. package/src/domains/onboarding/components/shared/QuestionWrapper.tsx +0 -36
  127. package/src/domains/onboarding/components/shared/ScreenContainer.tsx +0 -29
  128. package/src/domains/onboarding/components/shared/index.ts +0 -16
  129. package/src/domains/onboarding/components/shared/renderBundledIcon.tsx +0 -20
  130. package/src/domains/onboarding/onboarding.css +0 -1
  131. package/src/domains/onboarding/theme/cn.ts +0 -10
  132. package/src/domains/onboarding/theme/index.css +0 -131
  133. package/src/domains/onboarding/theme/index.ts +0 -12
  134. package/src/domains/onboarding/theme/tokens.ts +0 -122
  135. /package/src/domains/onboarding/{components/hooks → hooks}/index.ts +0 -0
@@ -1,4 +1,3 @@
1
-
2
1
  @import "@umituz/web-design-system/styles.css";
3
2
  :root {
4
3
  --udb-font-size-xs: 11px;
@@ -705,7 +704,6 @@
705
704
  .udb-spin {
706
705
  animation: udb-spin 1s linear infinite;
707
706
  }
708
- }
709
707
  .udb-settings {
710
708
  display: flex;
711
709
  width: 100%;
@@ -1688,3 +1686,821 @@
1688
1686
  align-items: center;
1689
1687
  gap: 0.5rem;
1690
1688
  }
1689
+
1690
+ .udb-onb,
1691
+ .udb-onb *,
1692
+ .udb-onb *::before,
1693
+ .udb-onb *::after {
1694
+ box-sizing: border-box;
1695
+ }
1696
+ .udb-onb {
1697
+ font-family: var(--font-sans);
1698
+ color: var(--color-foreground);
1699
+ background: var(--color-background);
1700
+ font-size: var(--udb-font-size-md);
1701
+ line-height: 1.5;
1702
+ }
1703
+ .udb-onb h1,
1704
+ .udb-onb h2,
1705
+ .udb-onb h3,
1706
+ .udb-onb p,
1707
+ .udb-onb ul,
1708
+ .udb-onb ol,
1709
+ .udb-onb figure,
1710
+ .udb-onb blockquote,
1711
+ .udb-onb pre {
1712
+ margin: 0;
1713
+ }
1714
+ .udb-onb ul,
1715
+ .udb-onb ol {
1716
+ list-style: none;
1717
+ padding: 0;
1718
+ }
1719
+ .udb-onb button,
1720
+ .udb-onb input,
1721
+ .udb-onb select,
1722
+ .udb-onb textarea {
1723
+ font: inherit;
1724
+ color: inherit;
1725
+ margin: 0;
1726
+ }
1727
+ .udb-onb button {
1728
+ padding: 0;
1729
+ background: none;
1730
+ border: 0;
1731
+ cursor: pointer;
1732
+ }
1733
+ .udb-onb cite {
1734
+ font-style: normal;
1735
+ }
1736
+ .udb-onb img,
1737
+ .udb-onb svg {
1738
+ display: block;
1739
+ max-width: 100%;
1740
+ }
1741
+ .udb-onb svg {
1742
+ flex-shrink: 0;
1743
+ }
1744
+
1745
+ .udb-onb-screen {
1746
+ display: flex;
1747
+ flex-direction: column;
1748
+ gap: var(--udb-space-6);
1749
+ width: 100%;
1750
+ max-width: 42rem;
1751
+ min-height: 100vh;
1752
+ margin-inline: auto;
1753
+ padding: var(--udb-space-6) var(--udb-space-4) var(--udb-space-8);
1754
+ }
1755
+ .udb-onb-screen__header,
1756
+ .udb-onb-screen__footer {
1757
+ display: flex;
1758
+ flex-direction: column;
1759
+ gap: var(--udb-space-3);
1760
+ }
1761
+ .udb-onb-screen__main {
1762
+ display: flex;
1763
+ flex: 1;
1764
+ flex-direction: column;
1765
+ gap: var(--udb-space-6);
1766
+ }
1767
+ @media (min-width: 640px) {
1768
+ .udb-onb-screen {
1769
+ padding-inline: var(--udb-space-6);
1770
+ }
1771
+ }
1772
+
1773
+ .udb-onb-title {
1774
+ font-size: var(--udb-font-size-2xl);
1775
+ font-weight: 600;
1776
+ }
1777
+ .udb-onb-title--display {
1778
+ font-size: var(--udb-font-size-3xl);
1779
+ font-weight: 700;
1780
+ }
1781
+ @media (min-width: 640px) {
1782
+ .udb-onb-title {
1783
+ font-size: var(--udb-font-size-3xl);
1784
+ }
1785
+ .udb-onb-title--display {
1786
+ font-size: var(--udb-font-size-4xl);
1787
+ }
1788
+ }
1789
+ .udb-onb-lead {
1790
+ font-size: var(--udb-font-size-lg);
1791
+ color: var(--color-muted-foreground);
1792
+ }
1793
+
1794
+ .udb-onb-question {
1795
+ display: flex;
1796
+ flex-direction: column;
1797
+ gap: var(--udb-space-6);
1798
+ width: 100%;
1799
+ }
1800
+ .udb-onb-question__head {
1801
+ display: flex;
1802
+ flex-direction: column;
1803
+ gap: var(--udb-space-2);
1804
+ }
1805
+ .udb-onb-question__body {
1806
+ display: flex;
1807
+ flex-direction: column;
1808
+ gap: var(--udb-space-3);
1809
+ }
1810
+
1811
+ .udb-onb-choice {
1812
+ flex: 1;
1813
+ display: inline-flex;
1814
+ align-items: center;
1815
+ justify-content: center;
1816
+ gap: var(--udb-space-2);
1817
+ padding: var(--udb-space-3);
1818
+ border: 2px solid;
1819
+ border-radius: var(--radius-lg);
1820
+ font-size: var(--udb-font-size-lg);
1821
+ font-weight: 600;
1822
+ transition: background-color 0.15s, border-color 0.15s, color 0.15s;
1823
+ }
1824
+ .udb-onb-choice:focus-visible {
1825
+ outline: 2px solid var(--color-primary);
1826
+ outline-offset: 2px;
1827
+ }
1828
+ .udb-onb-choice:disabled {
1829
+ cursor: not-allowed;
1830
+ opacity: 0.6;
1831
+ }
1832
+ .udb-onb-choice--no {
1833
+ border-color: var(--color-destructive);
1834
+ color: var(--color-destructive);
1835
+ }
1836
+ .udb-onb-choice--no:hover:not(:disabled) {
1837
+ background: var(--color-destructive);
1838
+ color: var(--color-white);
1839
+ }
1840
+ .udb-onb-choice--yes {
1841
+ border-color: var(--color-success);
1842
+ color: var(--color-success);
1843
+ }
1844
+ .udb-onb-choice--yes:hover:not(:disabled) {
1845
+ background: var(--color-success);
1846
+ color: var(--color-white);
1847
+ }
1848
+ .udb-onb-link {
1849
+ font-size: var(--udb-font-size-sm);
1850
+ font-weight: 600;
1851
+ color: var(--color-muted-foreground);
1852
+ text-underline-offset: 4px;
1853
+ }
1854
+ .udb-onb-link:hover:not(:disabled) {
1855
+ color: var(--color-foreground);
1856
+ text-decoration: underline;
1857
+ }
1858
+ .udb-onb-link:disabled {
1859
+ cursor: not-allowed;
1860
+ opacity: 0.5;
1861
+ }
1862
+
1863
+ .udb-onb-progress {
1864
+ display: flex;
1865
+ flex-direction: column;
1866
+ gap: var(--udb-space-2);
1867
+ width: 100%;
1868
+ }
1869
+ .udb-onb-progress__meta {
1870
+ display: flex;
1871
+ justify-content: space-between;
1872
+ font-size: var(--udb-font-size-sm);
1873
+ color: var(--color-muted-foreground);
1874
+ }
1875
+
1876
+ .udb-onb-icon {
1877
+ width: 20px;
1878
+ height: 20px;
1879
+ }
1880
+ .udb-onb-icon--xs {
1881
+ width: 14px;
1882
+ height: 14px;
1883
+ }
1884
+ .udb-onb-icon--sm {
1885
+ width: 16px;
1886
+ height: 16px;
1887
+ }
1888
+ .udb-onb-icon--lg {
1889
+ width: 40px;
1890
+ height: 40px;
1891
+ }
1892
+ .udb-onb-icon--xl {
1893
+ width: 48px;
1894
+ height: 48px;
1895
+ }
1896
+
1897
+ .udb-onb-swipe {
1898
+ position: relative;
1899
+ height: 18rem;
1900
+ width: 100%;
1901
+ user-select: none;
1902
+ }
1903
+ .udb-onb-swipe:focus-visible {
1904
+ outline: 2px solid var(--color-primary);
1905
+ outline-offset: 2px;
1906
+ }
1907
+ .udb-onb-swipe__card {
1908
+ display: flex;
1909
+ height: 100%;
1910
+ width: 100%;
1911
+ flex-direction: column;
1912
+ align-items: center;
1913
+ justify-content: center;
1914
+ padding: var(--udb-space-8);
1915
+ border: 1px solid var(--color-border);
1916
+ border-radius: var(--radius-lg);
1917
+ background: var(--color-card);
1918
+ box-shadow: var(--shadow-sm);
1919
+ text-align: center;
1920
+ cursor: grab;
1921
+ }
1922
+ .udb-onb-swipe__card:active {
1923
+ cursor: grabbing;
1924
+ }
1925
+ .udb-onb-swipe__category {
1926
+ margin-bottom: var(--udb-space-4);
1927
+ font-size: var(--udb-font-size-xs);
1928
+ font-weight: 600;
1929
+ text-transform: uppercase;
1930
+ letter-spacing: 0.025em;
1931
+ color: var(--color-primary);
1932
+ }
1933
+ .udb-onb-swipe__text {
1934
+ font-size: var(--udb-font-size-xl);
1935
+ font-weight: 500;
1936
+ }
1937
+ .udb-onb-swipe__hint {
1938
+ margin-top: var(--udb-space-6);
1939
+ font-size: var(--udb-font-size-sm);
1940
+ color: var(--color-muted-foreground);
1941
+ }
1942
+ .udb-onb-swipe__stamp {
1943
+ position: absolute;
1944
+ top: var(--udb-space-4);
1945
+ padding: var(--udb-space-1) var(--udb-space-3);
1946
+ border: 2px solid;
1947
+ border-radius: var(--radius-md);
1948
+ font-size: var(--udb-font-size-sm);
1949
+ font-weight: 700;
1950
+ text-transform: uppercase;
1951
+ pointer-events: none;
1952
+ }
1953
+ .udb-onb-swipe__stamp--no {
1954
+ left: var(--udb-space-4);
1955
+ border-color: var(--color-destructive);
1956
+ color: var(--color-destructive);
1957
+ }
1958
+ .udb-onb-swipe__stamp--yes {
1959
+ right: var(--udb-space-4);
1960
+ border-color: var(--color-success);
1961
+ color: var(--color-success);
1962
+ }
1963
+
1964
+ .udb-onb-stage {
1965
+ display: flex;
1966
+ flex: 1;
1967
+ flex-direction: column;
1968
+ align-items: center;
1969
+ justify-content: center;
1970
+ gap: var(--udb-space-6);
1971
+ text-align: center;
1972
+ }
1973
+ .udb-onb-stage--wide {
1974
+ gap: var(--udb-space-8);
1975
+ }
1976
+ .udb-onb-hero {
1977
+ display: flex;
1978
+ align-items: center;
1979
+ justify-content: center;
1980
+ border-radius: var(--radius-xl);
1981
+ background: var(--color-primary-soft, var(--color-muted));
1982
+ color: var(--color-primary);
1983
+ }
1984
+ .udb-onb-hero--lg {
1985
+ width: 80px;
1986
+ height: 80px;
1987
+ }
1988
+ .udb-onb-hero--xl {
1989
+ width: 96px;
1990
+ height: 96px;
1991
+ }
1992
+
1993
+ .udb-onb-welcome__group {
1994
+ display: flex;
1995
+ flex-direction: column;
1996
+ gap: var(--udb-space-3);
1997
+ }
1998
+ .udb-onb-welcome__title {
1999
+ font-size: var(--udb-font-size-4xl);
2000
+ font-weight: 700;
2001
+ }
2002
+ .udb-onb-welcome__subtitle {
2003
+ font-size: var(--udb-font-size-lg);
2004
+ }
2005
+ .udb-onb-welcome__highlight {
2006
+ font-size: var(--udb-font-size-sm);
2007
+ font-weight: 600;
2008
+ text-transform: uppercase;
2009
+ letter-spacing: 0.025em;
2010
+ color: var(--color-primary);
2011
+ }
2012
+
2013
+ .udb-onb-proof {
2014
+ display: flex;
2015
+ flex: 1;
2016
+ flex-direction: column;
2017
+ gap: var(--udb-space-8);
2018
+ }
2019
+ .udb-onb-proof__stage {
2020
+ display: flex;
2021
+ flex: 1;
2022
+ flex-direction: column;
2023
+ align-items: center;
2024
+ justify-content: center;
2025
+ }
2026
+ .udb-onb-proof__bar {
2027
+ display: flex;
2028
+ align-items: center;
2029
+ justify-content: space-between;
2030
+ gap: var(--udb-space-4);
2031
+ }
2032
+ .udb-onb-proof__nav {
2033
+ display: flex;
2034
+ gap: var(--udb-space-2);
2035
+ }
2036
+ .udb-onb-quote {
2037
+ display: flex;
2038
+ max-width: 36rem;
2039
+ flex-direction: column;
2040
+ align-items: center;
2041
+ gap: var(--udb-space-4);
2042
+ padding: var(--udb-space-8);
2043
+ border: 1px solid var(--color-border);
2044
+ border-radius: var(--radius-lg);
2045
+ background: var(--color-card);
2046
+ text-align: center;
2047
+ }
2048
+ .udb-onb-quote__stars {
2049
+ display: flex;
2050
+ gap: var(--udb-space-1);
2051
+ }
2052
+ .udb-onb-quote__star {
2053
+ width: 20px;
2054
+ height: 20px;
2055
+ color: var(--color-border);
2056
+ }
2057
+ .udb-onb-quote__star--filled {
2058
+ color: var(--color-warning);
2059
+ fill: currentColor;
2060
+ }
2061
+ .udb-onb-quote__content {
2062
+ font-size: var(--udb-font-size-lg);
2063
+ }
2064
+ .udb-onb-quote__footer {
2065
+ display: flex;
2066
+ flex-direction: column;
2067
+ align-items: center;
2068
+ gap: var(--udb-space-1);
2069
+ }
2070
+ .udb-onb-quote__avatar {
2071
+ width: 48px;
2072
+ height: 48px;
2073
+ border-radius: var(--udb-radius-pill);
2074
+ object-fit: cover;
2075
+ }
2076
+ .udb-onb-quote__cite {
2077
+ font-size: var(--udb-font-size-sm);
2078
+ font-weight: 600;
2079
+ }
2080
+ .udb-onb-quote__role {
2081
+ font-size: var(--udb-font-size-sm);
2082
+ color: var(--color-muted-foreground);
2083
+ }
2084
+ .udb-onb-dots {
2085
+ display: flex;
2086
+ gap: 6px;
2087
+ }
2088
+ .udb-onb-dot {
2089
+ width: 8px;
2090
+ height: 8px;
2091
+ border-radius: var(--udb-radius-pill);
2092
+ background: var(--color-border);
2093
+ transition: width 0.2s, background-color 0.2s;
2094
+ }
2095
+ .udb-onb-dot--active {
2096
+ width: var(--udb-space-6);
2097
+ background: var(--color-primary);
2098
+ }
2099
+
2100
+ .udb-onb-solutions {
2101
+ display: flex;
2102
+ flex-direction: column;
2103
+ gap: var(--udb-space-3);
2104
+ }
2105
+ .udb-onb-solution {
2106
+ display: flex;
2107
+ align-items: flex-start;
2108
+ gap: var(--udb-space-3);
2109
+ padding: var(--udb-space-4);
2110
+ border: 1px solid var(--color-border);
2111
+ border-radius: var(--radius-lg);
2112
+ background: var(--color-card);
2113
+ }
2114
+ .udb-onb-solution__icon {
2115
+ margin-top: 2px;
2116
+ color: var(--color-success);
2117
+ }
2118
+ .udb-onb-solution__body {
2119
+ display: flex;
2120
+ flex: 1;
2121
+ flex-direction: column;
2122
+ gap: var(--udb-space-1);
2123
+ }
2124
+ .udb-onb-solution__stat {
2125
+ font-size: var(--udb-font-size-sm);
2126
+ font-weight: 600;
2127
+ color: var(--color-primary);
2128
+ }
2129
+
2130
+ .udb-onb-compare {
2131
+ display: grid;
2132
+ grid-template-columns: 1fr;
2133
+ gap: var(--udb-space-4);
2134
+ }
2135
+ .udb-onb-compare__col {
2136
+ display: flex;
2137
+ flex-direction: column;
2138
+ gap: var(--udb-space-3);
2139
+ padding: var(--udb-space-5);
2140
+ border: 1px solid;
2141
+ border-radius: var(--radius-lg);
2142
+ background: var(--color-card);
2143
+ }
2144
+ .udb-onb-compare__col--pos {
2145
+ border-color: var(--color-success);
2146
+ }
2147
+ .udb-onb-compare__col--neg {
2148
+ border-color: var(--color-destructive);
2149
+ }
2150
+ .udb-onb-compare__heading {
2151
+ font-size: var(--udb-font-size-lg);
2152
+ font-weight: 600;
2153
+ }
2154
+ .udb-onb-compare__item {
2155
+ display: flex;
2156
+ align-items: flex-start;
2157
+ gap: var(--udb-space-2);
2158
+ font-size: var(--udb-font-size-sm);
2159
+ }
2160
+ .udb-onb-compare__icon {
2161
+ margin-top: 2px;
2162
+ }
2163
+ .udb-onb-compare__icon--pos {
2164
+ color: var(--color-success);
2165
+ }
2166
+ .udb-onb-compare__icon--neg {
2167
+ color: var(--color-destructive);
2168
+ }
2169
+ @media (min-width: 640px) {
2170
+ .udb-onb-compare {
2171
+ grid-template-columns: 1fr 1fr;
2172
+ }
2173
+ }
2174
+
2175
+ .udb-onb-prefs {
2176
+ display: flex;
2177
+ flex-direction: column;
2178
+ gap: var(--udb-space-5);
2179
+ }
2180
+ .udb-onb-field {
2181
+ display: flex;
2182
+ flex-direction: column;
2183
+ gap: var(--udb-space-2);
2184
+ }
2185
+ .udb-onb-field__label {
2186
+ font-size: var(--udb-font-size-sm);
2187
+ font-weight: 600;
2188
+ }
2189
+ .udb-onb-select {
2190
+ width: 100%;
2191
+ padding: var(--udb-space-2);
2192
+ border: 1px solid var(--color-border);
2193
+ border-radius: var(--radius-md);
2194
+ background: var(--color-card);
2195
+ font-size: var(--udb-font-size-sm);
2196
+ }
2197
+ .udb-onb-chips {
2198
+ display: flex;
2199
+ flex-wrap: wrap;
2200
+ gap: var(--udb-space-2);
2201
+ }
2202
+ .udb-onb-chip {
2203
+ padding: var(--udb-space-1) var(--udb-space-3);
2204
+ border: 1px solid var(--color-border);
2205
+ border-radius: var(--udb-radius-pill);
2206
+ background: var(--color-card);
2207
+ font-size: var(--udb-font-size-sm);
2208
+ transition: border-color 0.15s, background-color 0.15s;
2209
+ }
2210
+ .udb-onb-chip:hover {
2211
+ border-color: var(--color-primary);
2212
+ }
2213
+ .udb-onb-chip--on {
2214
+ border-color: transparent;
2215
+ background: var(--color-primary);
2216
+ color: var(--color-primary-foreground);
2217
+ }
2218
+ .udb-onb-switch {
2219
+ width: 44px;
2220
+ height: 24px;
2221
+ padding: 2px;
2222
+ border-radius: var(--udb-radius-pill);
2223
+ background: var(--color-border);
2224
+ transition: background-color 0.15s;
2225
+ }
2226
+ .udb-onb-switch--on {
2227
+ background: var(--color-primary);
2228
+ }
2229
+ .udb-onb-switch__thumb {
2230
+ display: block;
2231
+ width: 20px;
2232
+ height: 20px;
2233
+ border-radius: var(--udb-radius-pill);
2234
+ background: var(--color-white);
2235
+ transition: transform 0.15s;
2236
+ }
2237
+ .udb-onb-switch--on .udb-onb-switch__thumb {
2238
+ transform: translateX(20px);
2239
+ }
2240
+ .udb-onb-slider {
2241
+ display: flex;
2242
+ flex-direction: column;
2243
+ gap: var(--udb-space-1);
2244
+ }
2245
+ .udb-onb-slider input[type='range'] {
2246
+ width: 100%;
2247
+ accent-color: var(--color-primary);
2248
+ }
2249
+ .udb-onb-slider__scale {
2250
+ display: flex;
2251
+ justify-content: space-between;
2252
+ font-size: var(--udb-font-size-xs);
2253
+ color: var(--color-muted-foreground);
2254
+ }
2255
+
2256
+ .udb-onb-list {
2257
+ display: flex;
2258
+ flex-direction: column;
2259
+ gap: var(--udb-space-2);
2260
+ }
2261
+ .udb-onb-benefit {
2262
+ display: flex;
2263
+ align-items: flex-start;
2264
+ gap: var(--udb-space-2);
2265
+ padding: var(--udb-space-3);
2266
+ border: 1px solid var(--color-border);
2267
+ border-radius: var(--radius-md);
2268
+ background: var(--color-card);
2269
+ font-size: var(--udb-font-size-sm);
2270
+ }
2271
+ .udb-onb-benefit__dot {
2272
+ width: 8px;
2273
+ height: 8px;
2274
+ margin-top: 5px;
2275
+ flex-shrink: 0;
2276
+ border-radius: var(--udb-radius-pill);
2277
+ background: var(--color-primary);
2278
+ }
2279
+ .udb-onb-error {
2280
+ padding: var(--udb-space-3);
2281
+ border: 1px solid var(--color-destructive);
2282
+ border-radius: var(--radius-md);
2283
+ background: var(--color-destructive-soft, var(--color-muted));
2284
+ font-size: var(--udb-font-size-sm);
2285
+ color: var(--color-destructive);
2286
+ }
2287
+
2288
+ .udb-onb-steps {
2289
+ display: flex;
2290
+ width: 100%;
2291
+ max-width: 28rem;
2292
+ flex-direction: column;
2293
+ gap: var(--udb-space-3);
2294
+ margin-inline: auto;
2295
+ }
2296
+ .udb-onb-step {
2297
+ display: flex;
2298
+ align-items: center;
2299
+ gap: var(--udb-space-3);
2300
+ padding: var(--udb-space-3);
2301
+ border: 1px solid var(--color-border);
2302
+ border-radius: var(--radius-md);
2303
+ background: var(--color-card);
2304
+ font-size: var(--udb-font-size-sm);
2305
+ text-align: left;
2306
+ }
2307
+ .udb-onb-step--done {
2308
+ border-color: var(--color-success);
2309
+ background: var(--color-success-soft, var(--color-muted));
2310
+ }
2311
+ .udb-onb-step--active {
2312
+ border-color: var(--color-primary);
2313
+ background: var(--color-primary-soft, var(--color-muted));
2314
+ }
2315
+ .udb-onb-step__badge {
2316
+ display: flex;
2317
+ align-items: center;
2318
+ justify-content: center;
2319
+ flex-shrink: 0;
2320
+ width: 24px;
2321
+ height: 24px;
2322
+ border-radius: var(--udb-radius-pill);
2323
+ background: var(--color-border);
2324
+ color: var(--color-muted-foreground);
2325
+ font-size: var(--udb-font-size-xs);
2326
+ }
2327
+ .udb-onb-step--done .udb-onb-step__badge {
2328
+ background: var(--color-success);
2329
+ color: var(--color-primary-foreground);
2330
+ }
2331
+ .udb-onb-step--active .udb-onb-step__badge {
2332
+ background: var(--color-primary);
2333
+ color: var(--color-primary-foreground);
2334
+ }
2335
+ .udb-onb-step__pulse {
2336
+ width: 8px;
2337
+ height: 8px;
2338
+ margin-left: auto;
2339
+ border-radius: var(--udb-radius-pill);
2340
+ background: var(--color-primary);
2341
+ animation: udb-onb-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
2342
+ }
2343
+ @keyframes udb-onb-pulse {
2344
+ 50% {
2345
+ opacity: 0.5;
2346
+ }
2347
+ }
2348
+
2349
+ .udb-onb-demo {
2350
+ padding: var(--udb-space-4);
2351
+ border: 1px solid var(--color-border);
2352
+ border-radius: var(--radius-lg);
2353
+ background: var(--color-muted);
2354
+ }
2355
+
2356
+ .udb-onb-result {
2357
+ width: 100%;
2358
+ max-width: 28rem;
2359
+ padding: var(--udb-space-6);
2360
+ border: 1px solid var(--color-border);
2361
+ border-radius: var(--radius-lg);
2362
+ background: var(--color-card);
2363
+ text-align: left;
2364
+ }
2365
+ .udb-onb-result__pre {
2366
+ overflow-x: auto;
2367
+ white-space: pre-wrap;
2368
+ font-size: var(--udb-font-size-sm);
2369
+ }
2370
+ .udb-onb-share {
2371
+ display: flex;
2372
+ flex-direction: column;
2373
+ align-items: center;
2374
+ gap: var(--udb-space-1);
2375
+ font-size: var(--udb-font-size-sm);
2376
+ color: var(--color-muted-foreground);
2377
+ }
2378
+
2379
+ .udb-onb-price {
2380
+ padding: var(--udb-space-6);
2381
+ border: 2px solid var(--color-primary);
2382
+ border-radius: var(--radius-lg);
2383
+ background: var(--color-primary-soft, var(--color-muted));
2384
+ text-align: center;
2385
+ }
2386
+ .udb-onb-price__amount {
2387
+ font-size: var(--udb-font-size-3xl);
2388
+ font-weight: 700;
2389
+ color: var(--color-primary);
2390
+ }
2391
+ .udb-onb-price__terms {
2392
+ margin-top: var(--udb-space-1);
2393
+ font-size: var(--udb-font-size-sm);
2394
+ color: var(--color-muted-foreground);
2395
+ }
2396
+ .udb-onb-feature {
2397
+ display: flex;
2398
+ align-items: flex-start;
2399
+ gap: var(--udb-space-3);
2400
+ padding: var(--udb-space-3);
2401
+ border: 1px solid var(--color-border);
2402
+ border-radius: var(--radius-md);
2403
+ background: var(--color-card);
2404
+ font-size: var(--udb-font-size-sm);
2405
+ }
2406
+ .udb-onb-feature--hl {
2407
+ border-color: var(--color-primary);
2408
+ background: var(--color-primary-soft, var(--color-muted));
2409
+ }
2410
+ .udb-onb-feature__icon {
2411
+ margin-top: 2px;
2412
+ color: var(--color-primary);
2413
+ }
2414
+ .udb-onb-note {
2415
+ display: flex;
2416
+ align-items: center;
2417
+ justify-content: center;
2418
+ gap: var(--udb-space-1);
2419
+ font-size: var(--udb-font-size-xs);
2420
+ color: var(--color-muted-foreground);
2421
+ }
2422
+
2423
+ .udb-onb-nav {
2424
+ display: flex;
2425
+ align-items: center;
2426
+ justify-content: space-between;
2427
+ }
2428
+
2429
+ .udb-onb-errorpage {
2430
+ display: flex;
2431
+ width: 100%;
2432
+ max-width: 28rem;
2433
+ min-height: 100vh;
2434
+ flex-direction: column;
2435
+ align-items: center;
2436
+ justify-content: center;
2437
+ gap: var(--udb-space-4);
2438
+ margin-inline: auto;
2439
+ padding: var(--udb-space-6);
2440
+ text-align: center;
2441
+ }
2442
+ .udb-onb-errorpage__icon {
2443
+ display: flex;
2444
+ align-items: center;
2445
+ justify-content: center;
2446
+ width: 64px;
2447
+ height: 64px;
2448
+ border-radius: var(--radius-lg);
2449
+ background: var(--color-destructive-soft, var(--color-muted));
2450
+ color: var(--color-destructive);
2451
+ }
2452
+ .udb-onb-question__head--center {
2453
+ align-items: center;
2454
+ text-align: center;
2455
+ }
2456
+ .udb-onb-palettes {
2457
+ display: grid;
2458
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2459
+ gap: var(--udb-space-2);
2460
+ }
2461
+ @media (min-width: 640px) {
2462
+ .udb-onb-palettes {
2463
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2464
+ }
2465
+ }
2466
+ .udb-onb-palette {
2467
+ padding: var(--udb-space-2);
2468
+ border: 2px solid transparent;
2469
+ border-radius: var(--radius-md);
2470
+ text-align: left;
2471
+ }
2472
+ .udb-onb-palette:hover {
2473
+ border-color: var(--color-border);
2474
+ }
2475
+ .udb-onb-palette--active {
2476
+ border-color: var(--color-primary);
2477
+ }
2478
+ .udb-onb-palette__strip {
2479
+ display: flex;
2480
+ height: 48px;
2481
+ width: 100%;
2482
+ overflow: hidden;
2483
+ border-radius: var(--radius-sm);
2484
+ }
2485
+ .udb-onb-palette__strip--lg {
2486
+ height: 128px;
2487
+ }
2488
+ .udb-onb-palette__chip {
2489
+ flex: 1;
2490
+ }
2491
+ .udb-onb-palette__name {
2492
+ display: block;
2493
+ margin-top: var(--udb-space-1);
2494
+ font-size: var(--udb-font-size-xs);
2495
+ font-weight: 500;
2496
+ }
2497
+ .udb-onb-palette-preview {
2498
+ padding: var(--udb-space-6);
2499
+ border: 1px solid var(--color-border);
2500
+ border-radius: var(--radius-lg);
2501
+ background: var(--color-card);
2502
+ }
2503
+ .udb-onb-palette-preview p {
2504
+ margin-top: var(--udb-space-3);
2505
+ font-size: var(--udb-font-size-sm);
2506
+ }