@birdycom/omniacss 0.11.0 → 0.11.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 (47) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +44 -44
  3. package/dist/oc-theme.css +1 -1
  4. package/dist/omnia.css +2 -1
  5. package/dist/omnia.min.css +1 -1
  6. package/dist/omnia.starter.css +2 -0
  7. package/dist/tokens/omnia.dtcg.json +2 -2
  8. package/dist/tokens/omnia.tokens.json +1 -1
  9. package/dist/tokens/omnia_tokens.py +2 -2
  10. package/package.json +63 -63
  11. package/scss/utilities/_anchor_positioning.scss +65 -65
  12. package/scss/utilities/_animation_properties.scss +143 -143
  13. package/scss/utilities/_borders_extended.scss +97 -97
  14. package/scss/utilities/_borders_outlines.scss +161 -161
  15. package/scss/utilities/_containment.scss +82 -82
  16. package/scss/utilities/_css_functions.scss +34 -34
  17. package/scss/utilities/_dark_mode.scss +117 -117
  18. package/scss/utilities/_drop_shadow_colors.scss +26 -26
  19. package/scss/utilities/_experimental_css.scss +149 -149
  20. package/scss/utilities/_flexbox.scss +317 -317
  21. package/scss/utilities/_font_variants.scss +139 -139
  22. package/scss/utilities/_gap.scss +103 -103
  23. package/scss/utilities/_gradient_stops.scss +48 -48
  24. package/scss/utilities/_grid.scss +672 -672
  25. package/scss/utilities/_layout_extras.scss +171 -171
  26. package/scss/utilities/_layout_flow.scss +210 -210
  27. package/scss/utilities/_mask_extras.scss +62 -62
  28. package/scss/utilities/_motion_transforms.scss +167 -167
  29. package/scss/utilities/_scroll_animations.scss +80 -80
  30. package/scss/utilities/_scrollbar.scss +2 -1
  31. package/scss/utilities/_shadow_tokens.scss +21 -21
  32. package/scss/utilities/_shapes.scss +72 -72
  33. package/scss/utilities/_sizing_logical.scss +99 -99
  34. package/scss/utilities/_starting_style.scss +53 -53
  35. package/scss/utilities/_state_variants.scss +196 -196
  36. package/scss/utilities/_svg.scss +100 -100
  37. package/scss/utilities/_table_advanced.scss +19 -19
  38. package/scss/utilities/_typography_advanced.scss +124 -124
  39. package/scss/utilities/_typography_modern.scss +83 -83
  40. package/scss/utilities/_view_transitions.scss +64 -64
  41. package/scss/utilities/_writing_modes.scss +72 -72
  42. package/scss/variables/_hulp.scss +107 -107
  43. package/scss/variables/_variables_effects.scss +108 -108
  44. package/src/postcss.mjs +43 -43
  45. package/src/tokens.mjs +377 -377
  46. package/src/variants.mjs +278 -278
  47. package/tokens/semantic.json +80 -80
@@ -1,167 +1,167 @@
1
- // SCSS Document
2
- // File: src/scss/utilities/_motion_transforms.scss
3
- // Map: transition -> animation -> transform -> rotate/scale/skew/translate -> perspective
4
-
5
- /* Transition property — with a default duration and easing as longhands, so .duration-*, .ease-* and .delay-* (below) override them */
6
- .transition-none { transition-property: none; }
7
- .transition-all { transition-property: all; }
8
- .transition-colors { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; }
9
- .transition-opacity { transition-property: opacity; }
10
- .transition-shadow { transition-property: box-shadow; }
11
- .transition-transform { transition-property: transform, translate, scale, rotate; }
12
- :is(.transition-all, .transition-colors, .transition-opacity, .transition-shadow, .transition-transform) {
13
- transition-duration: 150ms;
14
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
15
- }
16
-
17
- /* Transition duration */
18
- .duration-75 { transition-duration: 75ms; }
19
- .duration-100 { transition-duration: 100ms; }
20
- .duration-150 { transition-duration: 150ms; }
21
- .duration-200 { transition-duration: 200ms; }
22
- .duration-300 { transition-duration: 300ms; }
23
- .duration-500 { transition-duration: 500ms; }
24
- .duration-700 { transition-duration: 700ms; }
25
- .duration-1000 { transition-duration: 1000ms; }
26
-
27
- /* Transition timing */
28
- .ease-linear { transition-timing-function: linear; }
29
- .ease-in { transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }
30
- .ease-out { transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }
31
- .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
32
-
33
- /* Transition delay */
34
- .delay-0 { transition-delay: 0ms; }
35
- .delay-75 { transition-delay: 75ms; }
36
- .delay-100 { transition-delay: 100ms; }
37
- .delay-150 { transition-delay: 150ms; }
38
- .delay-200 { transition-delay: 200ms; }
39
- .delay-300 { transition-delay: 300ms; }
40
- .delay-500 { transition-delay: 500ms; }
41
-
42
- /* Animation */
43
- @keyframes oc-spin {
44
- to { transform: rotate(360deg); }
45
- }
46
- @keyframes oc-ping {
47
- 75%, 100% { transform: scale(2); opacity: 0; }
48
- }
49
- @keyframes oc-pulse {
50
- 50% { opacity: .5; }
51
- }
52
- @keyframes oc-bounce {
53
- 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(0.8, 0, 1, 1); }
54
- 50% { transform: translateY(0); animation-timing-function: cubic-bezier(0, 0, 0.2, 1); }
55
- }
56
-
57
- .animate-none { animation: none; }
58
- .animate-spin { animation: oc-spin 1s linear infinite; }
59
- .animate-ping { animation: oc-ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; }
60
- .animate-pulse { animation: oc-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; }
61
- .animate-bounce { animation: oc-bounce 1s infinite; }
62
-
63
- /* Transform core */
64
- /* Rotate, scale and translate use the individual transform properties (rotate / scale / translate),
65
- so every class works on its own and they combine freely. Skew has no own property: it uses transform. */
66
- .transform {
67
- transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0));
68
- }
69
- .transform-none { transform: none; }
70
-
71
- /* Rotate */
72
- .rotate-0 { --oc-rotate: 0deg; rotate: 0deg; }
73
- .rotate-45 { --oc-rotate: 45deg; rotate: 45deg; }
74
- .rotate-90 { --oc-rotate: 90deg; rotate: 90deg; }
75
- .rotate-180 { --oc-rotate: 180deg; rotate: 180deg; }
76
-
77
- /* Scale */
78
- .scale-0 { --oc-scale-x: 0; --oc-scale-y: 0; scale: 0; }
79
- .scale-50 { --oc-scale-x: .5; --oc-scale-y: .5; scale: .5; }
80
- .scale-75 { --oc-scale-x: .75; --oc-scale-y: .75; scale: .75; }
81
- .scale-90 { --oc-scale-x: .9; --oc-scale-y: .9; scale: .9; }
82
- .scale-95 { --oc-scale-x: .95; --oc-scale-y: .95; scale: .95; }
83
- .scale-100 { --oc-scale-x: 1; --oc-scale-y: 1; scale: 1; }
84
- .scale-105 { --oc-scale-x: 1.05; --oc-scale-y: 1.05; scale: 1.05; }
85
- .scale-110 { --oc-scale-x: 1.1; --oc-scale-y: 1.1; scale: 1.1; }
86
- .scale-125 { --oc-scale-x: 1.25; --oc-scale-y: 1.25; scale: 1.25; }
87
- .scale-150 { --oc-scale-x: 1.5; --oc-scale-y: 1.5; scale: 1.5; }
88
-
89
- /* Skew */
90
- .skew-x-0 { --oc-skew-x: 0deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
91
- .skew-x-3 { --oc-skew-x: 3deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
92
- .skew-x-6 { --oc-skew-x: 6deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
93
- .skew-x-12 { --oc-skew-x: 12deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
94
- .skew-y-0 { --oc-skew-y: 0deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
95
- .skew-y-3 { --oc-skew-y: 3deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
96
- .skew-y-6 { --oc-skew-y: 6deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
97
- .skew-y-12 { --oc-skew-y: 12deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
98
-
99
- /* Translate */
100
- .translate-x-0 { --oc-translate-x: 0; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
101
- .translate-x-1 { --oc-translate-x: 0.25rem; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
102
- .translate-x-2 { --oc-translate-x: 0.5rem; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
103
- .translate-x-4 { --oc-translate-x: 1rem; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
104
- .translate-x-8 { --oc-translate-x: 2rem; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
105
- .translate-x-full { --oc-translate-x: 100%; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
106
- .translate-y-0 { --oc-translate-y: 0; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
107
- .translate-y-1 { --oc-translate-y: 0.25rem; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
108
- .translate-y-2 { --oc-translate-y: 0.5rem; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
109
- .translate-y-4 { --oc-translate-y: 1rem; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
110
- .translate-y-8 { --oc-translate-y: 2rem; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
111
- .translate-y-full { --oc-translate-y: 100%; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
112
-
113
- /* Transform origin and style */
114
- .origin-center { transform-origin: center; }
115
- .origin-top { transform-origin: top; }
116
- .origin-top-right { transform-origin: top right; }
117
- .origin-right { transform-origin: right; }
118
- .origin-bottom-right { transform-origin: bottom right; }
119
- .origin-bottom { transform-origin: bottom; }
120
- .origin-bottom-left { transform-origin: bottom left; }
121
- .origin-left { transform-origin: left; }
122
- .origin-top-left { transform-origin: top left; }
123
-
124
- .transform-flat { transform-style: flat; }
125
- .transform-3d { transform-style: preserve-3d; }
126
-
127
- /* Backface visibility */
128
- .backface-visible { backface-visibility: visible; }
129
- .backface-hidden { backface-visibility: hidden; }
130
-
131
- /* Perspective */
132
- .perspective-none { perspective: none; }
133
- .perspective-250 { perspective: 250px; }
134
- .perspective-500 { perspective: 500px; }
135
- .perspective-750 { perspective: 750px; }
136
- .perspective-1000 { perspective: 1000px; }
137
-
138
- .perspective-origin-center { perspective-origin: center; }
139
- .perspective-origin-top { perspective-origin: top; }
140
- .perspective-origin-bottom { perspective-origin: bottom; }
141
- .perspective-origin-left { perspective-origin: left; }
142
- .perspective-origin-right { perspective-origin: right; }
143
-
144
- /* Hover variants — the transform changes on :hover, so .transition-* / .duration-* / .ease-* become visible.
145
- Example: <div class="transition-transform duration-300 ease-out hover:scale-110"> */
146
- @each $key, $value in ("105": 1.05, "110": 1.1, "125": 1.25, "150": 1.5) {
147
- .hover\:scale-#{$key}:hover { scale: $value; }
148
- }
149
- @each $key in (12, 45, 90, 180) {
150
- .hover\:rotate-#{$key}:hover { rotate: #{$key}deg; }
151
- }
152
- @each $key, $value in ("1": 0.25rem, "2": 0.5rem, "4": 1rem, "8": 2rem) {
153
- .hover\:translate-x-#{$key}:hover { translate: $value var(--oc-translate-y, 0); }
154
- .hover\:-translate-y-#{$key}:hover { translate: var(--oc-translate-x, 0) calc(#{$value} * -1); }
155
- }
156
- @each $key in (6, 12) {
157
- .hover\:skew-x-#{$key}:hover { transform: skewX(#{$key}deg); }
158
- .hover\:skew-y-#{$key}:hover { transform: skewY(#{$key}deg); }
159
- }
160
- .hover\:opacity-50:hover { opacity: 0.5; }
161
-
162
- /* Group hover: hover the parent (.group) to change the child. */
163
- @each $key, $value in ("110": 1.1, "125": 1.25) {
164
- .group:hover .group-hover\:scale-#{$key} { scale: $value; }
165
- }
166
- .group:hover .group-hover\:translate-x-full { translate: 100% 0; }
167
- .group:hover .group-hover\:rotate-180 { rotate: 180deg; }
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_motion_transforms.scss
3
+ // Map: transition -> animation -> transform -> rotate/scale/skew/translate -> perspective
4
+
5
+ /* Transition property — with a default duration and easing as longhands, so .duration-*, .ease-* and .delay-* (below) override them */
6
+ .transition-none { transition-property: none; }
7
+ .transition-all { transition-property: all; }
8
+ .transition-colors { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; }
9
+ .transition-opacity { transition-property: opacity; }
10
+ .transition-shadow { transition-property: box-shadow; }
11
+ .transition-transform { transition-property: transform, translate, scale, rotate; }
12
+ :is(.transition-all, .transition-colors, .transition-opacity, .transition-shadow, .transition-transform) {
13
+ transition-duration: 150ms;
14
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
15
+ }
16
+
17
+ /* Transition duration */
18
+ .duration-75 { transition-duration: 75ms; }
19
+ .duration-100 { transition-duration: 100ms; }
20
+ .duration-150 { transition-duration: 150ms; }
21
+ .duration-200 { transition-duration: 200ms; }
22
+ .duration-300 { transition-duration: 300ms; }
23
+ .duration-500 { transition-duration: 500ms; }
24
+ .duration-700 { transition-duration: 700ms; }
25
+ .duration-1000 { transition-duration: 1000ms; }
26
+
27
+ /* Transition timing */
28
+ .ease-linear { transition-timing-function: linear; }
29
+ .ease-in { transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }
30
+ .ease-out { transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }
31
+ .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
32
+
33
+ /* Transition delay */
34
+ .delay-0 { transition-delay: 0ms; }
35
+ .delay-75 { transition-delay: 75ms; }
36
+ .delay-100 { transition-delay: 100ms; }
37
+ .delay-150 { transition-delay: 150ms; }
38
+ .delay-200 { transition-delay: 200ms; }
39
+ .delay-300 { transition-delay: 300ms; }
40
+ .delay-500 { transition-delay: 500ms; }
41
+
42
+ /* Animation */
43
+ @keyframes oc-spin {
44
+ to { transform: rotate(360deg); }
45
+ }
46
+ @keyframes oc-ping {
47
+ 75%, 100% { transform: scale(2); opacity: 0; }
48
+ }
49
+ @keyframes oc-pulse {
50
+ 50% { opacity: .5; }
51
+ }
52
+ @keyframes oc-bounce {
53
+ 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(0.8, 0, 1, 1); }
54
+ 50% { transform: translateY(0); animation-timing-function: cubic-bezier(0, 0, 0.2, 1); }
55
+ }
56
+
57
+ .animate-none { animation: none; }
58
+ .animate-spin { animation: oc-spin 1s linear infinite; }
59
+ .animate-ping { animation: oc-ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; }
60
+ .animate-pulse { animation: oc-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; }
61
+ .animate-bounce { animation: oc-bounce 1s infinite; }
62
+
63
+ /* Transform core */
64
+ /* Rotate, scale and translate use the individual transform properties (rotate / scale / translate),
65
+ so every class works on its own and they combine freely. Skew has no own property: it uses transform. */
66
+ .transform {
67
+ transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0));
68
+ }
69
+ .transform-none { transform: none; }
70
+
71
+ /* Rotate */
72
+ .rotate-0 { --oc-rotate: 0deg; rotate: 0deg; }
73
+ .rotate-45 { --oc-rotate: 45deg; rotate: 45deg; }
74
+ .rotate-90 { --oc-rotate: 90deg; rotate: 90deg; }
75
+ .rotate-180 { --oc-rotate: 180deg; rotate: 180deg; }
76
+
77
+ /* Scale */
78
+ .scale-0 { --oc-scale-x: 0; --oc-scale-y: 0; scale: 0; }
79
+ .scale-50 { --oc-scale-x: .5; --oc-scale-y: .5; scale: .5; }
80
+ .scale-75 { --oc-scale-x: .75; --oc-scale-y: .75; scale: .75; }
81
+ .scale-90 { --oc-scale-x: .9; --oc-scale-y: .9; scale: .9; }
82
+ .scale-95 { --oc-scale-x: .95; --oc-scale-y: .95; scale: .95; }
83
+ .scale-100 { --oc-scale-x: 1; --oc-scale-y: 1; scale: 1; }
84
+ .scale-105 { --oc-scale-x: 1.05; --oc-scale-y: 1.05; scale: 1.05; }
85
+ .scale-110 { --oc-scale-x: 1.1; --oc-scale-y: 1.1; scale: 1.1; }
86
+ .scale-125 { --oc-scale-x: 1.25; --oc-scale-y: 1.25; scale: 1.25; }
87
+ .scale-150 { --oc-scale-x: 1.5; --oc-scale-y: 1.5; scale: 1.5; }
88
+
89
+ /* Skew */
90
+ .skew-x-0 { --oc-skew-x: 0deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
91
+ .skew-x-3 { --oc-skew-x: 3deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
92
+ .skew-x-6 { --oc-skew-x: 6deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
93
+ .skew-x-12 { --oc-skew-x: 12deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
94
+ .skew-y-0 { --oc-skew-y: 0deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
95
+ .skew-y-3 { --oc-skew-y: 3deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
96
+ .skew-y-6 { --oc-skew-y: 6deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
97
+ .skew-y-12 { --oc-skew-y: 12deg; transform: skewX(var(--oc-skew-x, 0)) skewY(var(--oc-skew-y, 0)); }
98
+
99
+ /* Translate */
100
+ .translate-x-0 { --oc-translate-x: 0; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
101
+ .translate-x-1 { --oc-translate-x: 0.25rem; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
102
+ .translate-x-2 { --oc-translate-x: 0.5rem; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
103
+ .translate-x-4 { --oc-translate-x: 1rem; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
104
+ .translate-x-8 { --oc-translate-x: 2rem; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
105
+ .translate-x-full { --oc-translate-x: 100%; translate: var(--oc-translate-x) var(--oc-translate-y, 0) var(--oc-translate-z, 0); }
106
+ .translate-y-0 { --oc-translate-y: 0; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
107
+ .translate-y-1 { --oc-translate-y: 0.25rem; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
108
+ .translate-y-2 { --oc-translate-y: 0.5rem; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
109
+ .translate-y-4 { --oc-translate-y: 1rem; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
110
+ .translate-y-8 { --oc-translate-y: 2rem; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
111
+ .translate-y-full { --oc-translate-y: 100%; translate: var(--oc-translate-x, 0) var(--oc-translate-y) var(--oc-translate-z, 0); }
112
+
113
+ /* Transform origin and style */
114
+ .origin-center { transform-origin: center; }
115
+ .origin-top { transform-origin: top; }
116
+ .origin-top-right { transform-origin: top right; }
117
+ .origin-right { transform-origin: right; }
118
+ .origin-bottom-right { transform-origin: bottom right; }
119
+ .origin-bottom { transform-origin: bottom; }
120
+ .origin-bottom-left { transform-origin: bottom left; }
121
+ .origin-left { transform-origin: left; }
122
+ .origin-top-left { transform-origin: top left; }
123
+
124
+ .transform-flat { transform-style: flat; }
125
+ .transform-3d { transform-style: preserve-3d; }
126
+
127
+ /* Backface visibility */
128
+ .backface-visible { backface-visibility: visible; }
129
+ .backface-hidden { backface-visibility: hidden; }
130
+
131
+ /* Perspective */
132
+ .perspective-none { perspective: none; }
133
+ .perspective-250 { perspective: 250px; }
134
+ .perspective-500 { perspective: 500px; }
135
+ .perspective-750 { perspective: 750px; }
136
+ .perspective-1000 { perspective: 1000px; }
137
+
138
+ .perspective-origin-center { perspective-origin: center; }
139
+ .perspective-origin-top { perspective-origin: top; }
140
+ .perspective-origin-bottom { perspective-origin: bottom; }
141
+ .perspective-origin-left { perspective-origin: left; }
142
+ .perspective-origin-right { perspective-origin: right; }
143
+
144
+ /* Hover variants — the transform changes on :hover, so .transition-* / .duration-* / .ease-* become visible.
145
+ Example: <div class="transition-transform duration-300 ease-out hover:scale-110"> */
146
+ @each $key, $value in ("105": 1.05, "110": 1.1, "125": 1.25, "150": 1.5) {
147
+ .hover\:scale-#{$key}:hover { scale: $value; }
148
+ }
149
+ @each $key in (12, 45, 90, 180) {
150
+ .hover\:rotate-#{$key}:hover { rotate: #{$key}deg; }
151
+ }
152
+ @each $key, $value in ("1": 0.25rem, "2": 0.5rem, "4": 1rem, "8": 2rem) {
153
+ .hover\:translate-x-#{$key}:hover { translate: $value var(--oc-translate-y, 0); }
154
+ .hover\:-translate-y-#{$key}:hover { translate: var(--oc-translate-x, 0) calc(#{$value} * -1); }
155
+ }
156
+ @each $key in (6, 12) {
157
+ .hover\:skew-x-#{$key}:hover { transform: skewX(#{$key}deg); }
158
+ .hover\:skew-y-#{$key}:hover { transform: skewY(#{$key}deg); }
159
+ }
160
+ .hover\:opacity-50:hover { opacity: 0.5; }
161
+
162
+ /* Group hover: hover the parent (.group) to change the child. */
163
+ @each $key, $value in ("110": 1.1, "125": 1.25) {
164
+ .group:hover .group-hover\:scale-#{$key} { scale: $value; }
165
+ }
166
+ .group:hover .group-hover\:translate-x-full { translate: 100% 0; }
167
+ .group:hover .group-hover\:rotate-180 { rotate: 180deg; }
@@ -1,80 +1,80 @@
1
- // SCSS Document
2
- // File: src/scss/utilities/_scroll_animations.scss
3
- // Description: Scroll-driven animation utilities — drive animations by scroll progress instead of time.
4
- // Copyright: 2021-2026 Birdycom
5
- // Author: Serge Cools
6
- // Version: 0.3.0
7
- // Framework: OmniaCSS
8
- // Purpose: Generate .timeline-*, .animate-range-*, .scroll-timeline-*, .view-timeline-* classes
9
- // and ready-to-use .animate-scroll-* / .animate-view-* presets.
10
- // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll-driven_animations
11
- // Note: presets are wrapped in @supports so browsers without support keep the element fully visible.
12
- // Map: animation-timeline -> animation-range -> named timelines -> timeline-scope -> presets
13
-
14
- /* Animation timeline */
15
- .timeline-auto { animation-timeline: auto; }
16
- .timeline-none { animation-timeline: none; }
17
- .timeline-scroll { animation-timeline: scroll(); }
18
- .timeline-scroll-x { animation-timeline: scroll(x); }
19
- .timeline-scroll-root { animation-timeline: scroll(root); }
20
- .timeline-view { animation-timeline: view(); }
21
- .timeline-view-x { animation-timeline: view(x); }
22
- .timeline-oc { animation-timeline: --oc-timeline; }
23
-
24
- /* Animation range */
25
- .animate-range-normal { animation-range: normal; }
26
- .animate-range-cover { animation-range: cover; }
27
- .animate-range-contain { animation-range: contain; }
28
- .animate-range-entry { animation-range: entry; }
29
- .animate-range-exit { animation-range: exit; }
30
- .animate-range-entry-half { animation-range: entry 0% entry 50%; }
31
-
32
- /* Named scroll and view timelines */
33
- .scroll-timeline-oc { scroll-timeline: --oc-timeline block; }
34
- .scroll-timeline-oc-x { scroll-timeline: --oc-timeline inline; }
35
- .view-timeline-oc { view-timeline: --oc-timeline block; }
36
- .view-timeline-oc-x { view-timeline: --oc-timeline inline; }
37
-
38
- /* Timeline scope — expose a named timeline to siblings/descendants */
39
- .timeline-scope-oc { timeline-scope: --oc-timeline; }
40
- .timeline-scope-none { timeline-scope: none; }
41
-
42
- /* Presets */
43
- @keyframes oc-scroll-progress {
44
- from { transform: scaleX(0); }
45
- to { transform: scaleX(1); }
46
- }
47
- @keyframes oc-view-fade-in {
48
- from { opacity: 0; transform: translateY(2rem); }
49
- to { opacity: 1; transform: translateY(0); }
50
- }
51
- @keyframes oc-view-zoom-in {
52
- from { opacity: 0; transform: scale(0.8); }
53
- to { opacity: 1; transform: scale(1); }
54
- }
55
-
56
- @supports (animation-timeline: scroll()) {
57
- .animate-scroll-progress {
58
- transform-origin: 0 50%;
59
- animation: oc-scroll-progress linear both;
60
- animation-timeline: scroll(root);
61
- }
62
- .animate-view-fade-in {
63
- animation: oc-view-fade-in linear both;
64
- animation-timeline: view();
65
- animation-range: entry 0% cover 30%;
66
- }
67
- .animate-view-zoom-in {
68
- animation: oc-view-zoom-in linear both;
69
- animation-timeline: view();
70
- animation-range: entry 0% cover 30%;
71
- }
72
- }
73
-
74
- @media (prefers-reduced-motion: reduce) {
75
- .animate-scroll-progress,
76
- .animate-view-fade-in,
77
- .animate-view-zoom-in {
78
- animation: none;
79
- }
80
- }
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_scroll_animations.scss
3
+ // Description: Scroll-driven animation utilities — drive animations by scroll progress instead of time.
4
+ // Copyright: 2021-2026 Birdycom
5
+ // Author: Serge Cools
6
+ // Version: 0.3.0
7
+ // Framework: OmniaCSS
8
+ // Purpose: Generate .timeline-*, .animate-range-*, .scroll-timeline-*, .view-timeline-* classes
9
+ // and ready-to-use .animate-scroll-* / .animate-view-* presets.
10
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll-driven_animations
11
+ // Note: presets are wrapped in @supports so browsers without support keep the element fully visible.
12
+ // Map: animation-timeline -> animation-range -> named timelines -> timeline-scope -> presets
13
+
14
+ /* Animation timeline */
15
+ .timeline-auto { animation-timeline: auto; }
16
+ .timeline-none { animation-timeline: none; }
17
+ .timeline-scroll { animation-timeline: scroll(); }
18
+ .timeline-scroll-x { animation-timeline: scroll(x); }
19
+ .timeline-scroll-root { animation-timeline: scroll(root); }
20
+ .timeline-view { animation-timeline: view(); }
21
+ .timeline-view-x { animation-timeline: view(x); }
22
+ .timeline-oc { animation-timeline: --oc-timeline; }
23
+
24
+ /* Animation range */
25
+ .animate-range-normal { animation-range: normal; }
26
+ .animate-range-cover { animation-range: cover; }
27
+ .animate-range-contain { animation-range: contain; }
28
+ .animate-range-entry { animation-range: entry; }
29
+ .animate-range-exit { animation-range: exit; }
30
+ .animate-range-entry-half { animation-range: entry 0% entry 50%; }
31
+
32
+ /* Named scroll and view timelines */
33
+ .scroll-timeline-oc { scroll-timeline: --oc-timeline block; }
34
+ .scroll-timeline-oc-x { scroll-timeline: --oc-timeline inline; }
35
+ .view-timeline-oc { view-timeline: --oc-timeline block; }
36
+ .view-timeline-oc-x { view-timeline: --oc-timeline inline; }
37
+
38
+ /* Timeline scope — expose a named timeline to siblings/descendants */
39
+ .timeline-scope-oc { timeline-scope: --oc-timeline; }
40
+ .timeline-scope-none { timeline-scope: none; }
41
+
42
+ /* Presets */
43
+ @keyframes oc-scroll-progress {
44
+ from { transform: scaleX(0); }
45
+ to { transform: scaleX(1); }
46
+ }
47
+ @keyframes oc-view-fade-in {
48
+ from { opacity: 0; transform: translateY(2rem); }
49
+ to { opacity: 1; transform: translateY(0); }
50
+ }
51
+ @keyframes oc-view-zoom-in {
52
+ from { opacity: 0; transform: scale(0.8); }
53
+ to { opacity: 1; transform: scale(1); }
54
+ }
55
+
56
+ @supports (animation-timeline: scroll()) {
57
+ .animate-scroll-progress {
58
+ transform-origin: 0 50%;
59
+ animation: oc-scroll-progress linear both;
60
+ animation-timeline: scroll(root);
61
+ }
62
+ .animate-view-fade-in {
63
+ animation: oc-view-fade-in linear both;
64
+ animation-timeline: view();
65
+ animation-range: entry 0% cover 30%;
66
+ }
67
+ .animate-view-zoom-in {
68
+ animation: oc-view-zoom-in linear both;
69
+ animation-timeline: view();
70
+ animation-range: entry 0% cover 30%;
71
+ }
72
+ }
73
+
74
+ @media (prefers-reduced-motion: reduce) {
75
+ .animate-scroll-progress,
76
+ .animate-view-fade-in,
77
+ .animate-view-zoom-in {
78
+ animation: none;
79
+ }
80
+ }
@@ -44,6 +44,7 @@
44
44
  --oc-scrollbar-track: transparent;
45
45
  scrollbar-color: var(--oc-scrollbar-thumb) var(--oc-scrollbar-track);
46
46
  }
47
- .scrollbar-omnia:hover {
47
+ /* :has(:hover) keeps it while the pointer is over a popover or dialog (top layer), where <html> itself is not :hover. */
48
+ .scrollbar-omnia:is(:hover, :has(:hover)) {
48
49
  --oc-scrollbar-thumb: light-dark(var(--color-vividblue-95), var(--color-vividblue-60));
49
50
  }
@@ -1,21 +1,21 @@
1
- // File: src/scss/utilities/_shadow_tokens.scss
2
- // Shared light-dark() aware shadow values (Omnia tokens only). Emits no CSS itself.
3
- // Used by .shadow-* (_effects_advanced.scss), state variants (_state_variants.scss) and dark: utilities.
4
- @use "sass:string";
5
- $oc-shadow-c: string.unquote("var(--oc-shadow-color, var(--color-black-50))");
6
- @function oc-sh($l, $d) {
7
- @return string.unquote("light-dark(oklch(from #{$oc-shadow-c} l c h / #{$l}), oklch(from #{$oc-shadow-c} l c h / #{$d}))");
8
- }
9
- $oc-shadow-edge: string.unquote(", 0 0 0 1px light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.2))");
10
- $oc-shadow-edge-hi: string.unquote(", 0 0 0 1px light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.22)), inset 0 1px 0 0 light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.14))");
11
- $oc-shadow-sm: 0 1px 2px 0 oc-sh(0.08, 0.6) + $oc-shadow-edge;
12
- $oc-shadow-md: 0 4px 6px -1px oc-sh(0.15, 0.7), 0 2px 4px -2px oc-sh(0.12, 0.6) + $oc-shadow-edge;
13
- $oc-shadow-lg: 0 10px 15px -3px oc-sh(0.18, 0.75), 0 4px 6px -4px oc-sh(0.14, 0.65) + $oc-shadow-edge-hi;
14
- $oc-shadow-xl: 0 20px 25px -5px oc-sh(0.22, 0.8), 0 8px 10px -6px oc-sh(0.16, 0.7) + $oc-shadow-edge-hi;
15
- // Dark-only variants (for .dark: utilities, where color-scheme is not guaranteed to be dark)
16
- @function oc-shd($d) { @return string.unquote("oklch(from #{$oc-shadow-c} l c h / #{$d})"); }
17
- $oc-dark-edge: string.unquote(", 0 0 0 1px oklch(from var(--color-white-50) l c h / 0.2)");
18
- $oc-dark-edge-hi: string.unquote(", 0 0 0 1px oklch(from var(--color-white-50) l c h / 0.22), inset 0 1px 0 0 oklch(from var(--color-white-50) l c h / 0.14)");
19
- $oc-dark-shadow-sm: 0 1px 2px 0 oc-shd(0.6) + $oc-dark-edge;
20
- $oc-dark-shadow-md: 0 4px 6px -1px oc-shd(0.7), 0 2px 4px -2px oc-shd(0.6) + $oc-dark-edge;
21
- $oc-dark-shadow-lg: 0 10px 15px -3px oc-shd(0.75), 0 4px 6px -4px oc-shd(0.65) + $oc-dark-edge-hi;
1
+ // File: src/scss/utilities/_shadow_tokens.scss
2
+ // Shared light-dark() aware shadow values (Omnia tokens only). Emits no CSS itself.
3
+ // Used by .shadow-* (_effects_advanced.scss), state variants (_state_variants.scss) and dark: utilities.
4
+ @use "sass:string";
5
+ $oc-shadow-c: string.unquote("var(--oc-shadow-color, var(--color-black-50))");
6
+ @function oc-sh($l, $d) {
7
+ @return string.unquote("light-dark(oklch(from #{$oc-shadow-c} l c h / #{$l}), oklch(from #{$oc-shadow-c} l c h / #{$d}))");
8
+ }
9
+ $oc-shadow-edge: string.unquote(", 0 0 0 1px light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.2))");
10
+ $oc-shadow-edge-hi: string.unquote(", 0 0 0 1px light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.22)), inset 0 1px 0 0 light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.14))");
11
+ $oc-shadow-sm: 0 1px 2px 0 oc-sh(0.08, 0.6) + $oc-shadow-edge;
12
+ $oc-shadow-md: 0 4px 6px -1px oc-sh(0.15, 0.7), 0 2px 4px -2px oc-sh(0.12, 0.6) + $oc-shadow-edge;
13
+ $oc-shadow-lg: 0 10px 15px -3px oc-sh(0.18, 0.75), 0 4px 6px -4px oc-sh(0.14, 0.65) + $oc-shadow-edge-hi;
14
+ $oc-shadow-xl: 0 20px 25px -5px oc-sh(0.22, 0.8), 0 8px 10px -6px oc-sh(0.16, 0.7) + $oc-shadow-edge-hi;
15
+ // Dark-only variants (for .dark: utilities, where color-scheme is not guaranteed to be dark)
16
+ @function oc-shd($d) { @return string.unquote("oklch(from #{$oc-shadow-c} l c h / #{$d})"); }
17
+ $oc-dark-edge: string.unquote(", 0 0 0 1px oklch(from var(--color-white-50) l c h / 0.2)");
18
+ $oc-dark-edge-hi: string.unquote(", 0 0 0 1px oklch(from var(--color-white-50) l c h / 0.22), inset 0 1px 0 0 oklch(from var(--color-white-50) l c h / 0.14)");
19
+ $oc-dark-shadow-sm: 0 1px 2px 0 oc-shd(0.6) + $oc-dark-edge;
20
+ $oc-dark-shadow-md: 0 4px 6px -1px oc-shd(0.7), 0 2px 4px -2px oc-shd(0.6) + $oc-dark-edge;
21
+ $oc-dark-shadow-lg: 0 10px 15px -3px oc-shd(0.75), 0 4px 6px -4px oc-shd(0.65) + $oc-dark-edge-hi;