ps-helix 6.2.3 → 7.0.0

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 (31) hide show
  1. package/CONFIGURATION.md +492 -0
  2. package/README.md +131 -125
  3. package/THEME.md +37 -27
  4. package/TOKENS.md +662 -0
  5. package/fesm2022/ps-helix.mjs +7777 -5714
  6. package/fesm2022/ps-helix.mjs.map +1 -1
  7. package/package.json +18 -8
  8. package/src/lib/styles/base/a11y.css +36 -0
  9. package/src/lib/styles/base/behavior.css +15 -0
  10. package/src/lib/styles/base/global.css +9 -26
  11. package/src/lib/styles/compat.css +580 -0
  12. package/src/lib/styles/themes/dark-auto.css +315 -0
  13. package/src/lib/styles/themes/dark.css +259 -157
  14. package/src/lib/styles/themes/light.css +236 -221
  15. package/src/lib/styles/tokens/animations.tokens.css +30 -21
  16. package/src/lib/styles/tokens/breakpoints.tokens.css +22 -6
  17. package/src/lib/styles/tokens/effects.tokens.css +25 -25
  18. package/src/lib/styles/tokens/layout.tokens.css +32 -32
  19. package/src/lib/styles/tokens/sizing.tokens.css +87 -75
  20. package/src/lib/styles/tokens/spacing.tokens.css +18 -18
  21. package/src/lib/styles/tokens/typography.tokens.css +34 -34
  22. package/src/lib/styles/utilities/animations.utils.css +18 -18
  23. package/src/lib/styles/utilities/colors.utils.css +196 -196
  24. package/src/lib/styles/utilities/focus.utils.css +13 -13
  25. package/src/lib/styles/utilities/layout.utils.css +9 -9
  26. package/src/lib/styles/utilities/responsive.utils.css +49 -49
  27. package/src/lib/styles/utilities/spacing.utils.css +96 -96
  28. package/src/lib/styles/utilities/typography.utils.css +25 -25
  29. package/styles-full.css +25 -0
  30. package/styles.css +17 -8
  31. package/types/ps-helix.d.ts +3251 -1724
@@ -1,39 +1,39 @@
1
1
  /* Design Tokens - Visual Effects */
2
2
 
3
3
  :root {
4
- /* Border Radii - Semantic aliases for sizing.tokens.css radius scale */
5
- --border-radius: var(--radius-lg); /* 0.5rem / 8px - Default radius */
6
- --border-radius-lg: var(--radius-xl); /* 0.75rem / 12px - Large radius */
7
- --border-radius-full: var(--radius-full); /* 9999px - Full circle */
4
+ /* Border radii live in sizing.tokens.css. They used to be shadowed here by a shifted
5
+ alias layer — --border-radius resolved to --radius-lg, --border-radius-lg to
6
+ --radius-xl — which is why the library carried two competing scales. The aliases are
7
+ gone and their consumers now point at the step they actually rendered. */
8
8
 
9
9
  /* Shadows */
10
- --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
11
- --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
12
- --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
10
+ --psh-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
11
+ --psh-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
12
+ --psh-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
13
13
 
14
14
  /* Z-Index System */
15
- --z-index-navigation: 50;
16
- --z-index-dropdown: 100;
17
- --z-index-tooltip: 200;
18
- --z-index-modal-backdrop: 999;
19
- --z-index-modal: 1000;
20
- --z-index-overlay: 1100; /* body-teleported popovers (select/dropdown/menu) above modals */
21
- --z-index-toast: 9999;
15
+ --psh-z-index-navigation: 50;
16
+ --psh-z-index-dropdown: 100;
17
+ --psh-z-index-tooltip: 200;
18
+ --psh-z-index-modal-backdrop: 999;
19
+ --psh-z-index-modal: 1000;
20
+ --psh-z-index-overlay: 1100; /* body-teleported popovers (select/dropdown/menu) above modals */
21
+ --psh-z-index-toast: 9999;
22
22
 
23
23
  /* Focus System */
24
- --focus-outline-width: 2px;
25
- --focus-outline-style: solid;
26
- --focus-outline-color: var(--primary-color);
27
- --focus-outline-offset: 2px;
28
- --focus-ring-width: 3px;
29
- --focus-ring-color: rgba(var(--primary-color-rgb), 0.2);
24
+ --psh-focus-outline-width: 2px;
25
+ --psh-focus-outline-style: solid;
26
+ --psh-focus-outline-color: var(--psh-primary-color);
27
+ --psh-focus-outline-offset: 2px;
28
+ --psh-focus-ring-width: 3px;
29
+ --psh-focus-ring-color: rgba(var(--psh-primary-color-rgb), 0.2);
30
30
 
31
31
  /* Focus variants */
32
- --focus-ring-error: rgba(var(--danger-color-rgb), 0.2);
33
- --focus-ring-success: rgba(var(--success-color-rgb), 0.2);
34
- --focus-ring-warning: rgba(var(--warning-color-rgb), 0.2);
32
+ --psh-focus-ring-error: rgba(var(--psh-danger-color-rgb), 0.2);
33
+ --psh-focus-ring-success: rgba(var(--psh-success-color-rgb), 0.2);
34
+ --psh-focus-ring-warning: rgba(var(--psh-warning-color-rgb), 0.2);
35
35
 
36
36
  /* Opacity System */
37
- --opacity-disabled: 0.6;
38
- --opacity-loading: 0.7;
37
+ --psh-opacity-disabled: 0.6;
38
+ --psh-opacity-loading: 0.7;
39
39
  }
@@ -1,32 +1,32 @@
1
- /* Design Tokens - Layout System */
2
-
3
- :root {
4
- /* Container System */
5
- --container-padding-sm: var(--spacing-md);
6
- --container-padding-md: var(--spacing-lg);
7
- --container-padding-lg: var(--spacing-xl);
8
- --container-max-width: 80rem; /* 1280px */
9
-
10
- /* Grid System */
11
- --grid-gap-sm: var(--spacing-sm);
12
- --grid-gap-md: var(--spacing-md);
13
- --grid-gap-lg: var(--spacing-lg);
14
-
15
- /* Flexbox variables */
16
- --flex-none: 0 0 auto;
17
- --flex-auto: 1 1 auto;
18
- --flex-initial: 0 1 auto;
19
-
20
- /* Grid variables */
21
- --grid-cols-1: repeat(1, minmax(0, 1fr));
22
- --grid-cols-2: repeat(2, minmax(0, 1fr));
23
- --grid-cols-3: repeat(3, minmax(0, 1fr));
24
- --grid-cols-4: repeat(4, minmax(0, 1fr));
25
- --grid-cols-6: repeat(6, minmax(0, 1fr));
26
- --grid-cols-12: repeat(12, minmax(0, 1fr));
27
-
28
- /* Select component specific */
29
- --select-max-width: var(--container-sm);
30
- --dropdown-max-height: var(--size-52);
31
- --select-checkbox-size: var(--size-4-5);
32
- }
1
+ /* Design Tokens - Layout System */
2
+
3
+ :root {
4
+ /* Container System */
5
+ --psh-container-padding-sm: var(--psh-spacing-md);
6
+ --psh-container-padding-md: var(--psh-spacing-lg);
7
+ --psh-container-padding-lg: var(--psh-spacing-xl);
8
+ --psh-container-max-width: 80rem; /* 1280px */
9
+
10
+ /* Grid System */
11
+ --psh-grid-gap-sm: var(--psh-spacing-sm);
12
+ --psh-grid-gap-md: var(--psh-spacing-md);
13
+ --psh-grid-gap-lg: var(--psh-spacing-lg);
14
+
15
+ /* Flexbox variables */
16
+ --psh-flex-none: 0 0 auto;
17
+ --psh-flex-auto: 1 1 auto;
18
+ --psh-flex-initial: 0 1 auto;
19
+
20
+ /* Grid variables */
21
+ --psh-grid-cols-1: repeat(1, minmax(0, 1fr));
22
+ --psh-grid-cols-2: repeat(2, minmax(0, 1fr));
23
+ --psh-grid-cols-3: repeat(3, minmax(0, 1fr));
24
+ --psh-grid-cols-4: repeat(4, minmax(0, 1fr));
25
+ --psh-grid-cols-6: repeat(6, minmax(0, 1fr));
26
+ --psh-grid-cols-12: repeat(12, minmax(0, 1fr));
27
+
28
+ /* Select component specific */
29
+ --psh-select-max-width: var(--psh-container-sm);
30
+ --psh-dropdown-max-height: var(--psh-size-52);
31
+ --psh-select-checkbox-size: var(--psh-size-4-5);
32
+ }
@@ -2,93 +2,105 @@
2
2
 
3
3
  :root {
4
4
  /* Base sizing scale - All measurements in rem for accessibility */
5
- --size-0: 0;
6
- --size-px: 0.0625rem; /* 1px */
7
- --size-0-5: 0.125rem; /* 2px */
8
- --size-1: 0.25rem; /* 4px */
9
- --size-1-5: 0.375rem; /* 6px */
10
- --size-2: 0.5rem; /* 8px */
11
- --size-2-5: 0.625rem; /* 10px */
12
- --size-3: 0.75rem; /* 12px */
13
- --size-3-5: 0.875rem; /* 14px */
14
- --size-4: 1rem; /* 16px */
15
- --size-4-5: 1.125rem; /* 18px */
16
- --size-5: 1.25rem; /* 20px */
17
- --size-5-5: 1.375rem; /* 22px */
18
- --size-6: 1.5rem; /* 24px */
19
- --size-6-5: 1.625rem; /* 26px */
20
- --size-7: 1.75rem; /* 28px */
21
- --size-8: 2rem; /* 32px */
22
- --size-8-5: 2.125rem; /* 34px */
23
- --size-9: 2.25rem; /* 36px */
24
- --size-10: 2.5rem; /* 40px */
25
- --size-11: 2.75rem; /* 44px */
26
- --size-12: 3rem; /* 48px */
27
- --size-14: 3.5rem; /* 56px */
28
- --size-16: 4rem; /* 64px */
29
- --size-18: 4.5rem; /* 72px */
30
- --size-20: 5rem; /* 80px */
31
- --size-24: 6rem; /* 96px */
32
- --size-28: 7rem; /* 112px */
33
- --size-32: 8rem; /* 128px */
34
- --size-36: 9rem; /* 144px */
35
- --size-40: 10rem; /* 160px */
36
- --size-44: 11rem; /* 176px */
37
- --size-48: 12rem; /* 192px */
38
- --size-52: 13rem; /* 208px */
39
- --size-56: 14rem; /* 224px */
40
- --size-60: 15rem; /* 240px */
41
- --size-64: 16rem; /* 256px */
42
- --size-72: 18rem; /* 288px */
43
- --size-80: 20rem; /* 320px */
44
- --size-96: 24rem; /* 384px */
5
+ --psh-size-0: 0;
6
+ --psh-size-px: 0.0625rem; /* 1px */
7
+ --psh-size-0-5: 0.125rem; /* 2px */
8
+ --psh-size-1: 0.25rem; /* 4px */
9
+ --psh-size-1-5: 0.375rem; /* 6px */
10
+ --psh-size-2: 0.5rem; /* 8px */
11
+ --psh-size-2-5: 0.625rem; /* 10px */
12
+ --psh-size-3: 0.75rem; /* 12px */
13
+ --psh-size-3-5: 0.875rem; /* 14px */
14
+ --psh-size-4: 1rem; /* 16px */
15
+ --psh-size-4-5: 1.125rem; /* 18px */
16
+ --psh-size-5: 1.25rem; /* 20px */
17
+ --psh-size-5-5: 1.375rem; /* 22px */
18
+ --psh-size-6: 1.5rem; /* 24px */
19
+ --psh-size-6-5: 1.625rem; /* 26px */
20
+ --psh-size-7: 1.75rem; /* 28px */
21
+ --psh-size-8: 2rem; /* 32px */
22
+ --psh-size-8-5: 2.125rem; /* 34px */
23
+ --psh-size-9: 2.25rem; /* 36px */
24
+ --psh-size-10: 2.5rem; /* 40px */
25
+ --psh-size-11: 2.75rem; /* 44px */
26
+ --psh-size-12: 3rem; /* 48px */
27
+ --psh-size-14: 3.5rem; /* 56px */
28
+ --psh-size-16: 4rem; /* 64px */
29
+ --psh-size-18: 4.5rem; /* 72px */
30
+ --psh-size-20: 5rem; /* 80px */
31
+ --psh-size-24: 6rem; /* 96px */
32
+ --psh-size-28: 7rem; /* 112px */
33
+ --psh-size-32: 8rem; /* 128px */
34
+ --psh-size-36: 9rem; /* 144px */
35
+ --psh-size-40: 10rem; /* 160px */
36
+ --psh-size-44: 11rem; /* 176px */
37
+ --psh-size-48: 12rem; /* 192px */
38
+ --psh-size-52: 13rem; /* 208px */
39
+ --psh-size-56: 14rem; /* 224px */
40
+ --psh-size-60: 15rem; /* 240px */
41
+ --psh-size-64: 16rem; /* 256px */
42
+ --psh-size-72: 18rem; /* 288px */
43
+ --psh-size-80: 20rem; /* 320px */
44
+ --psh-size-96: 24rem; /* 384px */
45
45
 
46
46
  /* Icon sizes */
47
- --icon-size-xs: 0.75rem; /* 12px */
48
- --icon-size-sm: 1rem; /* 16px */
49
- --icon-size-md: 1.25rem; /* 20px */
50
- --icon-size-lg: 1.5rem; /* 24px */
51
- --icon-size-xl: 2rem; /* 32px */
52
- --icon-size-2xl: 3rem; /* 48px */
47
+ --psh-icon-size-xs: 0.75rem; /* 12px */
48
+ --psh-icon-size-sm: 1rem; /* 16px */
49
+ --psh-icon-size-md: 1.25rem; /* 20px */
50
+ --psh-icon-size-lg: 1.5rem; /* 24px */
51
+ --psh-icon-size-xl: 2rem; /* 32px */
52
+ --psh-icon-size-2xl: 3rem; /* 48px */
53
53
 
54
54
  /* Border widths - keeping px for subpixel rendering */
55
- --border-width-0: 0;
56
- --border-width-1: 1px;
57
- --border-width-2: 2px;
58
- --border-width-4: 4px;
59
- --border-width-8: 8px;
55
+ --psh-border-width-0: 0;
56
+ --psh-border-width-1: 1px;
57
+ --psh-border-width-2: 2px;
58
+ --psh-border-width-4: 4px;
59
+ --psh-border-width-8: 8px;
60
60
 
61
61
  /* Border radius scale */
62
- --radius-none: 0;
63
- --radius-sm: 0.125rem; /* 2px */
64
- --radius-base: 0.25rem; /* 4px */
65
- --radius-md: 0.375rem; /* 6px */
66
- --radius-lg: 0.5rem; /* 8px */
67
- --radius-xl: 0.75rem; /* 12px */
68
- --radius-2xl: 1rem; /* 16px */
69
- --radius-3xl: 1.5rem; /* 24px */
70
- --radius-full: 9999px;
62
+ --psh-radius-none: 0;
63
+ --psh-radius-sm: 0.125rem; /* 2px */
64
+ --psh-radius-base: 0.25rem; /* 4px */
65
+ --psh-radius-md: 0.375rem; /* 6px */
66
+ --psh-radius-lg: 0.5rem; /* 8px */
67
+ --psh-radius-xl: 0.75rem; /* 12px */
68
+ --psh-radius-2xl: 1rem; /* 16px */
69
+ --psh-radius-3xl: 1.5rem; /* 24px */
70
+ --psh-radius-full: 9999px;
71
71
 
72
72
  /* Container max-widths */
73
- --container-xs: 20rem; /* 320px */
74
- --container-sm: 24rem; /* 384px */
75
- --container-md: 28rem; /* 448px */
76
- --container-lg: 32rem; /* 512px */
77
- --container-xl: 36rem; /* 576px */
78
- --container-2xl: 42rem; /* 672px */
79
- --container-3xl: 48rem; /* 768px */
80
- --container-4xl: 56rem; /* 896px */
81
- --container-5xl: 64rem; /* 1024px */
82
- --container-6xl: 72rem; /* 1152px */
83
- --container-7xl: 80rem; /* 1280px */
73
+ --psh-container-xs: 20rem; /* 320px */
74
+ --psh-container-sm: 24rem; /* 384px */
75
+ --psh-container-md: 28rem; /* 448px */
76
+ --psh-container-lg: 32rem; /* 512px */
77
+ --psh-container-xl: 36rem; /* 576px */
78
+ --psh-container-2xl: 42rem; /* 672px */
79
+ --psh-container-3xl: 48rem; /* 768px */
80
+ --psh-container-4xl: 56rem; /* 896px */
81
+ --psh-container-5xl: 64rem; /* 1024px */
82
+ --psh-container-6xl: 72rem; /* 1152px */
83
+ --psh-container-7xl: 80rem; /* 1280px */
84
84
 
85
85
  /* Input component heights */
86
- --height-input-sm: 2rem; /* 32px */
87
- --height-input-md: 2.5rem; /* 40px */
88
- --height-input-lg: 3rem; /* 48px */
86
+ --psh-control-height-sm: 2rem; /* 32px */
87
+ --psh-control-height-md: 2.5rem; /* 40px */
88
+ --psh-control-height-lg: 3rem; /* 48px */
89
+
90
+ /*
91
+ * Minimum hit area for anything tappable.
92
+ *
93
+ * WCAG 2.5.8 (AA) asks for 24px and 2.5.5 (AAA) for 44. The library had neither an opinion
94
+ * nor a token, and shipped targets at 24, 32 and 36px — so the smallest one was exactly at
95
+ * the AA floor and nothing was near AAA.
96
+ *
97
+ * It bounds the *target*, not the drawing: a 24px icon inside a 44px button looks the same
98
+ * and is twice as easy to hit.
99
+ */
100
+ --psh-touch-target-min: 2.75rem; /* 44px */
89
101
 
90
102
  /* Scrollbar width compensation */
91
- --scrollbar-width: 0;
103
+ --psh-scrollbar-width: 0;
92
104
 
93
105
  /* Breakpoints - See tokens/breakpoints.tokens.css for the responsive scale */
94
106
  }
@@ -2,26 +2,26 @@
2
2
 
3
3
  :root {
4
4
  /* Positive spacing scale */
5
- --spacing-xxs: 0.125rem; /* 2px */
6
- --spacing-xs: 0.25rem; /* 4px */
7
- --spacing-sm: 0.5rem; /* 8px */
8
- --spacing-md: 1rem; /* 16px */
9
- --spacing-lg: 1.5rem; /* 24px */
10
- --spacing-xl: 2rem; /* 32px */
11
- --spacing-2xl: 3rem; /* 48px */
12
- --spacing-3xl: 4rem; /* 64px */
13
- --spacing-4xl: 5rem; /* 80px */
5
+ --psh-spacing-xxs: 0.125rem; /* 2px */
6
+ --psh-spacing-xs: 0.25rem; /* 4px */
7
+ --psh-spacing-sm: 0.5rem; /* 8px */
8
+ --psh-spacing-md: 1rem; /* 16px */
9
+ --psh-spacing-lg: 1.5rem; /* 24px */
10
+ --psh-spacing-xl: 2rem; /* 32px */
11
+ --psh-spacing-2xl: 3rem; /* 48px */
12
+ --psh-spacing-3xl: 4rem; /* 64px */
13
+ --psh-spacing-4xl: 5rem; /* 80px */
14
14
 
15
15
  /* Form field semantic spacing */
16
- --form-field-gap: var(--spacing-xs); /* label <-> control <-> message */
17
- --form-label-gap: var(--spacing-sm); /* control <-> inline label (checkbox/radio/switch) */
16
+ --psh-form-field-gap: var(--psh-spacing-xs); /* label <-> control <-> message */
17
+ --psh-form-label-gap: var(--psh-spacing-sm); /* control <-> inline label (checkbox/radio/switch) */
18
18
 
19
19
  /* Negative spacing scale (for negative margins) */
20
- --negative-spacing-xxs: -0.125rem;
21
- --negative-spacing-xs: -0.25rem;
22
- --negative-spacing-sm: -0.5rem;
23
- --negative-spacing-md: -1rem;
24
- --negative-spacing-lg: -1.5rem;
25
- --negative-spacing-xl: -2rem;
26
- --negative-spacing-2xl: -3rem;
20
+ --psh-negative-spacing-xxs: -0.125rem;
21
+ --psh-negative-spacing-xs: -0.25rem;
22
+ --psh-negative-spacing-sm: -0.5rem;
23
+ --psh-negative-spacing-md: -1rem;
24
+ --psh-negative-spacing-lg: -1.5rem;
25
+ --psh-negative-spacing-xl: -2rem;
26
+ --psh-negative-spacing-2xl: -3rem;
27
27
  }
@@ -1,34 +1,34 @@
1
- /* Design Tokens - Typography System */
2
-
3
- :root {
4
- /* Font family */
5
- --font-family: 'Poppins', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
6
-
7
- /* Font Sizes - Fluid Typography with clamp() */
8
- --font-size-xs: clamp(0.6875rem, 0.5vw + 0.625rem, 0.75rem); /* 11-12px */
9
- --font-size-sm: clamp(0.8125rem, 0.5vw + 0.75rem, 0.875rem); /* 13-14px */
10
- --font-size-base: clamp(0.9375rem, 0.5vw + 0.875rem, 1rem); /* 15-16px */
11
- --font-size-lg: clamp(1.0625rem, 0.75vw + 0.9375rem, 1.125rem); /* 17-18px */
12
- --font-size-xl: clamp(1.125rem, 1vw + 1rem, 1.25rem); /* 18-20px */
13
- --font-size-2xl: clamp(1.25rem, 1.5vw + 1rem, 1.5rem); /* 20-24px */
14
- --font-size-3xl: clamp(1.5rem, 2vw + 1.125rem, 1.875rem); /* 24-30px */
15
- --font-size-4xl: clamp(1.75rem, 2.5vw + 1.25rem, 2.25rem); /* 28-36px */
16
-
17
- /* Font Weights */
18
- --font-weight-normal: 400;
19
- --font-weight-medium: 500;
20
- --font-weight-semibold: 600;
21
- --font-weight-bold: 700;
22
-
23
- /* Line Heights */
24
- --line-height-tight: 1.25;
25
- --line-height-normal: 1.5;
26
- --line-height-relaxed: 1.75;
27
-
28
- /* Letter Spacing */
29
- --letter-spacing-tight: -0.025em;
30
- --letter-spacing-normal: 0;
31
- --letter-spacing-wide: 0.025em;
32
- --letter-spacing-wider: 0.05em;
33
- --letter-spacing-widest: 0.1em;
34
- }
1
+ /* Design Tokens - Typography System */
2
+
3
+ :root {
4
+ /* Font family */
5
+ --psh-font-family: 'Poppins', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
6
+
7
+ /* Font Sizes - Fluid Typography with clamp() */
8
+ --psh-font-size-xs: clamp(0.6875rem, 0.5vw + 0.625rem, 0.75rem); /* 11-12px */
9
+ --psh-font-size-sm: clamp(0.8125rem, 0.5vw + 0.75rem, 0.875rem); /* 13-14px */
10
+ --psh-font-size-base: clamp(0.9375rem, 0.5vw + 0.875rem, 1rem); /* 15-16px */
11
+ --psh-font-size-lg: clamp(1.0625rem, 0.75vw + 0.9375rem, 1.125rem); /* 17-18px */
12
+ --psh-font-size-xl: clamp(1.125rem, 1vw + 1rem, 1.25rem); /* 18-20px */
13
+ --psh-font-size-2xl: clamp(1.25rem, 1.5vw + 1rem, 1.5rem); /* 20-24px */
14
+ --psh-font-size-3xl: clamp(1.5rem, 2vw + 1.125rem, 1.875rem); /* 24-30px */
15
+ --psh-font-size-4xl: clamp(1.75rem, 2.5vw + 1.25rem, 2.25rem); /* 28-36px */
16
+
17
+ /* Font Weights */
18
+ --psh-font-weight-normal: 400;
19
+ --psh-font-weight-medium: 500;
20
+ --psh-font-weight-semibold: 600;
21
+ --psh-font-weight-bold: 700;
22
+
23
+ /* Line Heights */
24
+ --psh-line-height-tight: 1.25;
25
+ --psh-line-height-normal: 1.5;
26
+ --psh-line-height-relaxed: 1.75;
27
+
28
+ /* Letter Spacing */
29
+ --psh-letter-spacing-tight: -0.025em;
30
+ --psh-letter-spacing-normal: 0;
31
+ --psh-letter-spacing-wide: 0.025em;
32
+ --psh-letter-spacing-wider: 0.05em;
33
+ --psh-letter-spacing-widest: 0.1em;
34
+ }
@@ -13,7 +13,7 @@
13
13
  @keyframes fadeInUp {
14
14
  from {
15
15
  opacity: 0;
16
- transform: translateY(var(--animation-distance-md));
16
+ transform: translateY(var(--psh-animation-distance-md));
17
17
  }
18
18
  to {
19
19
  opacity: 1;
@@ -35,7 +35,7 @@
35
35
  @keyframes slideInDown {
36
36
  from {
37
37
  opacity: 0;
38
- transform: translateY(calc(-1 * var(--animation-distance-md)));
38
+ transform: translateY(calc(-1 * var(--psh-animation-distance-md)));
39
39
  }
40
40
  to {
41
41
  opacity: 1;
@@ -46,7 +46,7 @@
46
46
  @keyframes slideInLeft {
47
47
  from {
48
48
  opacity: 0;
49
- transform: translateX(calc(-1 * var(--animation-distance-md)));
49
+ transform: translateX(calc(-1 * var(--psh-animation-distance-md)));
50
50
  }
51
51
  to {
52
52
  opacity: 1;
@@ -57,7 +57,7 @@
57
57
  @keyframes slideInRight {
58
58
  from {
59
59
  opacity: 0;
60
- transform: translateX(var(--animation-distance-md));
60
+ transform: translateX(var(--psh-animation-distance-md));
61
61
  }
62
62
  to {
63
63
  opacity: 1;
@@ -87,7 +87,7 @@
87
87
  transform: translateY(0);
88
88
  }
89
89
  50% {
90
- transform: translateY(calc(-1 * var(--animation-distance-sm)));
90
+ transform: translateY(calc(-1 * var(--psh-animation-distance-sm)));
91
91
  }
92
92
  }
93
93
 
@@ -104,54 +104,54 @@
104
104
 
105
105
  /* Animation utility classes */
106
106
  .psh-animate-fade-in {
107
- animation: fadeIn var(--animation-duration-default) var(--animation-easing-default);
107
+ animation: fadeIn var(--psh-animation-duration-default) var(--psh-animation-easing-default);
108
108
  }
109
109
 
110
110
  .psh-animate-fade-in-up {
111
- animation: fadeInUp var(--animation-duration-default) var(--animation-easing-default);
111
+ animation: fadeInUp var(--psh-animation-duration-default) var(--psh-animation-easing-default);
112
112
  }
113
113
 
114
114
  .psh-animate-slide-in {
115
- animation: slideIn var(--animation-duration-default) var(--animation-easing-default);
115
+ animation: slideIn var(--psh-animation-duration-default) var(--psh-animation-easing-default);
116
116
  }
117
117
 
118
118
  .psh-animate-slide-in-down {
119
- animation: slideInDown var(--animation-duration-default) var(--animation-easing-default);
119
+ animation: slideInDown var(--psh-animation-duration-default) var(--psh-animation-easing-default);
120
120
  }
121
121
 
122
122
  .psh-animate-slide-in-left {
123
- animation: slideInLeft var(--animation-duration-default) var(--animation-easing-default);
123
+ animation: slideInLeft var(--psh-animation-duration-default) var(--psh-animation-easing-default);
124
124
  }
125
125
 
126
126
  .psh-animate-slide-in-right {
127
- animation: slideInRight var(--animation-duration-default) var(--animation-easing-default);
127
+ animation: slideInRight var(--psh-animation-duration-default) var(--psh-animation-easing-default);
128
128
  }
129
129
 
130
130
  .psh-animate-scale-in {
131
- animation: scaleIn var(--animation-duration-fast) var(--animation-easing-smooth);
131
+ animation: scaleIn var(--psh-animation-duration-fast) var(--psh-animation-easing-smooth);
132
132
  }
133
133
 
134
134
  .psh-animate-spin {
135
- animation: spin 1s linear infinite;
135
+ animation: spin var(--psh-animation-loop-normal) var(--psh-animation-easing-linear) infinite;
136
136
  }
137
137
 
138
138
  .psh-animate-bounce {
139
- animation: bounce var(--animation-duration-slow) var(--animation-easing-default) infinite;
139
+ animation: bounce var(--psh-animation-duration-slow) var(--psh-animation-easing-default) infinite;
140
140
  }
141
141
 
142
142
  .psh-animate-pulse {
143
- animation: pulse var(--animation-duration-slow) var(--animation-easing-default) infinite;
143
+ animation: pulse var(--psh-animation-duration-slow) var(--psh-animation-easing-default) infinite;
144
144
  }
145
145
 
146
146
  /* Animation control utilities */
147
147
  .psh-animate-fast {
148
- animation-duration: var(--animation-duration-fast) !important;
148
+ animation-duration: var(--psh-animation-duration-fast) !important;
149
149
  }
150
150
 
151
151
  .psh-animate-slow {
152
- animation-duration: var(--animation-duration-slow) !important;
152
+ animation-duration: var(--psh-animation-duration-slow) !important;
153
153
  }
154
154
 
155
155
  .psh-animate-smooth {
156
- animation-timing-function: var(--animation-easing-smooth) !important;
156
+ animation-timing-function: var(--psh-animation-easing-smooth) !important;
157
157
  }