@birdycom/omniacss 0.0.0-stage → 0.11.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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -2
  3. package/dist/oc-colors.css +4429 -0
  4. package/dist/oc-theme.css +69 -0
  5. package/dist/omnia.css +465435 -0
  6. package/dist/omnia.min.css +2 -0
  7. package/dist/omnia.starter.css +13459 -0
  8. package/dist/omnia.starter.min.css +1 -0
  9. package/dist/tokens/omnia.dtcg.json +1496 -0
  10. package/dist/tokens/omnia.tokens.json +580 -0
  11. package/dist/tokens/omnia_tokens.py +189 -0
  12. package/package.json +61 -4
  13. package/scss/base/_reset.scss +88 -0
  14. package/scss/config/omniacss.config.scss +114 -0
  15. package/scss/config/omniacss.fonts.scss +34 -0
  16. package/scss/functions/_functions.scss +407 -0
  17. package/scss/json/html-colors.json +1998 -0
  18. package/scss/json/omnia-colors.json +500 -0
  19. package/scss/json/ral-colors.json +3430 -0
  20. package/scss/layout/_media_query.scss +18 -0
  21. package/scss/omnia_colors.scss +7 -0
  22. package/scss/omnia_main.scss +143 -0
  23. package/scss/profiles/omnia_main.hsl.scss +12 -0
  24. package/scss/profiles/omnia_main.oklab.scss +12 -0
  25. package/scss/profiles/omnia_main.oklch.scss +12 -0
  26. package/scss/utilities/_accessibility.scss +42 -0
  27. package/scss/utilities/_alignment.scss +861 -0
  28. package/scss/utilities/_anchor_positioning.scss +65 -0
  29. package/scss/utilities/_animation_properties.scss +143 -0
  30. package/scss/utilities/_aspect.scss +73 -0
  31. package/scss/utilities/_backgrounds.scss +49 -0
  32. package/scss/utilities/_borders_extended.scss +97 -0
  33. package/scss/utilities/_borders_outlines.scss +161 -0
  34. package/scss/utilities/_clamp.scss +111 -0
  35. package/scss/utilities/_colors_html.scss +341 -0
  36. package/scss/utilities/_colors_mix.scss +84 -0
  37. package/scss/utilities/_colors_omnia.scss +315 -0
  38. package/scss/utilities/_colors_ral.scss +151 -0
  39. package/scss/utilities/_colors_tokens.scss +87 -0
  40. package/scss/utilities/_container.scss +58 -0
  41. package/scss/utilities/_containment.scss +82 -0
  42. package/scss/utilities/_corner_shape.scss +30 -0
  43. package/scss/utilities/_css_functions.scss +34 -0
  44. package/scss/utilities/_dark_mode.scss +117 -0
  45. package/scss/utilities/_display.scss +58 -0
  46. package/scss/utilities/_drop_shadow_colors.scss +26 -0
  47. package/scss/utilities/_effects.scss +50 -0
  48. package/scss/utilities/_effects_advanced.scss +102 -0
  49. package/scss/utilities/_experimental_css.scss +149 -0
  50. package/scss/utilities/_filters.scss +89 -0
  51. package/scss/utilities/_flexbox.scss +318 -0
  52. package/scss/utilities/_font_variants.scss +139 -0
  53. package/scss/utilities/_fonts.scss +276 -0
  54. package/scss/utilities/_gap.scss +104 -0
  55. package/scss/utilities/_gradient_stops.scss +48 -0
  56. package/scss/utilities/_gradients.scss +99 -0
  57. package/scss/utilities/_grid.scss +673 -0
  58. package/scss/utilities/_index.scss +22 -0
  59. package/scss/utilities/_interactivity.scss +198 -0
  60. package/scss/utilities/_layering.scss +24 -0
  61. package/scss/utilities/_layout_extras.scss +171 -0
  62. package/scss/utilities/_layout_flow.scss +210 -0
  63. package/scss/utilities/_mask_extras.scss +62 -0
  64. package/scss/utilities/_motion_transforms.scss +167 -0
  65. package/scss/utilities/_overflow.scss +41 -0
  66. package/scss/utilities/_position.scss +49 -0
  67. package/scss/utilities/_responsive.scss +272 -0
  68. package/scss/utilities/_scroll_animations.scss +80 -0
  69. package/scss/utilities/_scroll_spacing.scss +33 -0
  70. package/scss/utilities/_scrollbar.scss +49 -0
  71. package/scss/utilities/_shadow_tokens.scss +21 -0
  72. package/scss/utilities/_shapes.scss +72 -0
  73. package/scss/utilities/_sizing.scss +458 -0
  74. package/scss/utilities/_sizing_logical.scss +99 -0
  75. package/scss/utilities/_space_divide.scss +85 -0
  76. package/scss/utilities/_spacing_margin.scss +199 -0
  77. package/scss/utilities/_spacing_padding.scss +195 -0
  78. package/scss/utilities/_starting_style.scss +53 -0
  79. package/scss/utilities/_state_variants.scss +196 -0
  80. package/scss/utilities/_svg.scss +100 -0
  81. package/scss/utilities/_table.scss +46 -0
  82. package/scss/utilities/_table_advanced.scss +19 -0
  83. package/scss/utilities/_text.scss +1331 -0
  84. package/scss/utilities/_transforms_3d.scss +76 -0
  85. package/scss/utilities/_typography_advanced.scss +124 -0
  86. package/scss/utilities/_typography_modern.scss +83 -0
  87. package/scss/utilities/_view_transitions.scss +64 -0
  88. package/scss/utilities/_writing_modes.scss +72 -0
  89. package/scss/variables/_color_tone.scss +39 -0
  90. package/scss/variables/_hulp.scss +108 -0
  91. package/scss/variables/_mixins.scss +40 -0
  92. package/scss/variables/_modifiers.scss +32 -0
  93. package/scss/variables/_variables.scss +302 -0
  94. package/scss/variables/_variables_colors_html.scss +2019 -0
  95. package/scss/variables/_variables_colors_omnia.scss +465 -0
  96. package/scss/variables/_variables_colors_ral.scss +3472 -0
  97. package/scss/variables/_variables_effects.scss +109 -0
  98. package/scss/variables/_variables_flex_grid.scss +427 -0
  99. package/scss/variables/_variables_layout.scss +591 -0
  100. package/scss/variables/_variables_typography.scss +550 -0
  101. package/src/engine.mjs +258 -0
  102. package/src/postcss.mjs +43 -0
  103. package/src/starter-classes.mjs +124 -0
  104. package/src/tokens.mjs +377 -0
  105. package/src/variants.mjs +278 -0
  106. package/tokens/semantic.json +80 -0
@@ -0,0 +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; }
@@ -0,0 +1,41 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_overflow.scss
3
+ // Map: overflow -> overflow-axis -> overscroll behavior -> overscroll axis
4
+
5
+ @use "../utilities/" as *;
6
+
7
+ /* Overflow utilities */
8
+
9
+ .overflow-auto { overflow: auto; }
10
+ .overflow-hidden { overflow: hidden; }
11
+ .overflow-clip { overflow: clip; }
12
+ .overflow-visible { overflow: visible; }
13
+ .overflow-scroll { overflow: scroll; }
14
+
15
+ /* Overflow axis utilities */
16
+
17
+ .overflow-x-auto { overflow-x: auto; }
18
+ .overflow-x-hidden { overflow-x: hidden; }
19
+ .overflow-x-clip { overflow-x: clip; }
20
+ .overflow-x-visible { overflow-x: visible; }
21
+ .overflow-x-scroll { overflow-x: scroll; }
22
+
23
+ .overflow-y-auto { overflow-y: auto; }
24
+ .overflow-y-hidden { overflow-y: hidden; }
25
+ .overflow-y-clip { overflow-y: clip; }
26
+ .overflow-y-visible { overflow-y: visible; }
27
+ .overflow-y-scroll { overflow-y: scroll; }
28
+
29
+ /* Overscroll behavior utilities */
30
+
31
+ .overscroll-auto { overscroll-behavior: auto; }
32
+ .overscroll-contain { overscroll-behavior: contain; }
33
+ .overscroll-none { overscroll-behavior: none; }
34
+
35
+ .overscroll-x-auto { overscroll-behavior-x: auto; }
36
+ .overscroll-x-contain { overscroll-behavior-x: contain; }
37
+ .overscroll-x-none { overscroll-behavior-x: none; }
38
+
39
+ .overscroll-y-auto { overscroll-behavior-y: auto; }
40
+ .overscroll-y-contain { overscroll-behavior-y: contain; }
41
+ .overscroll-y-none { overscroll-behavior-y: none; }
@@ -0,0 +1,49 @@
1
+ // SCSS Document
2
+ // File: src/utilities/_position.scss
3
+ // Description: Position property
4
+ // Copyright: 2021-2022 Birdycom
5
+ // Autor: Serge Cools
6
+ // Version: 0.2.0
7
+ // Framework: OmniaCSS
8
+ // Property: position
9
+ // Values: absolute, fixed, static, sticky, relative
10
+
11
+ @use '../utilities/' as *;
12
+
13
+ /* The Position property */
14
+
15
+ ///
16
+ /// The position Property
17
+ /// @group Position
18
+ ///
19
+
20
+ ///
21
+ /// The position property specifies the type of positioning method used for an element.
22
+ /// @group Position
23
+ /// @name position
24
+ /// @link src/scss/utilities/_position.scss
25
+ /// @since 1.0.0
26
+ /// @author Serge Cools
27
+ ///
28
+ /// Applies to: all elements
29
+ ///
30
+ /// @require $posvalues
31
+ /// @example scss - position class
32
+ /// @each $posvalues-prop in $posvalues {
33
+ /// .#{$posvalues-prop} {
34
+ /// position: $posvalues-prop;
35
+ /// }
36
+ /// }
37
+ /// @example html - use position class
38
+ /// <div class="absolute">
39
+ ///
40
+ /// </div>
41
+ @each $posvalues-prop in $posvalues {
42
+
43
+ .#{$posvalues-prop} {
44
+
45
+ position: $posvalues-prop;
46
+
47
+ }
48
+ }
49
+ /* End Position property */
@@ -0,0 +1,272 @@
1
+ // File: src/scss/utilities/_responsive.scss
2
+ // Description: Responsive variant utilities for key layout, display and spacing classes.
3
+ // Breakpoints: sm (>=36rem), md (>=50rem), lg (>=64rem)
4
+ // Pattern: .{prefix}\:{utility} e.g. sm\:hidden, md\:flex, lg\:grid-cols-3
5
+ // Copyright: 2021-2026 Birdycom
6
+ // Autor: Serge Cools
7
+ // Version: 0.1.6
8
+ // Framework: OmniaCSS
9
+ // Note: Only the most commonly needed utilities get responsive variants
10
+ // to keep output size manageable. Values match _media_query.scss breakpoints.
11
+
12
+ // ---------------------------------------------------------------------------
13
+ // Responsive breakpoints (same values as layout/_media_query.scss)
14
+ // ---------------------------------------------------------------------------
15
+ $_responsive-breakpoints: (
16
+ 'sm': 36rem,
17
+ 'md': 50rem,
18
+ 'lg': 64rem
19
+ );
20
+
21
+ // ---------------------------------------------------------------------------
22
+ // Generate responsive variants inside each breakpoint media query.
23
+ // Utilities are grouped by category for readability.
24
+ // ---------------------------------------------------------------------------
25
+ @each $prefix, $min-width in $_responsive-breakpoints {
26
+ @media (min-width: $min-width) {
27
+
28
+ // -----------------------------------------------------------------------
29
+ // Display utilities
30
+ // -----------------------------------------------------------------------
31
+ .#{$prefix}\:block { display: block; }
32
+ .#{$prefix}\:hidden { display: none; }
33
+ .#{$prefix}\:flex { display: flex; }
34
+ .#{$prefix}\:inline-flex { display: inline-flex; }
35
+ .#{$prefix}\:grid { display: grid; }
36
+ .#{$prefix}\:inline-grid { display: inline-grid; }
37
+ .#{$prefix}\:inline-block { display: inline-block; }
38
+ .#{$prefix}\:inline { display: inline; }
39
+ .#{$prefix}\:table { display: table; }
40
+ .#{$prefix}\:table-cell { display: table-cell; }
41
+ .#{$prefix}\:table-row { display: table-row; }
42
+ .#{$prefix}\:contents { display: contents; }
43
+
44
+ // -----------------------------------------------------------------------
45
+ // Flex direction
46
+ // -----------------------------------------------------------------------
47
+ .#{$prefix}\:flex-row { flex-direction: row; }
48
+ .#{$prefix}\:flex-row-reverse { flex-direction: row-reverse; }
49
+ .#{$prefix}\:flex-col { flex-direction: column; }
50
+ .#{$prefix}\:flex-col-reverse { flex-direction: column-reverse; }
51
+
52
+ // Flex wrap
53
+ .#{$prefix}\:wrap { flex-wrap: wrap; }
54
+ .#{$prefix}\:nowrap { flex-wrap: nowrap; }
55
+ .#{$prefix}\:wrap-reverse { flex-wrap: wrap-reverse; }
56
+
57
+ // Flex grow / shrink
58
+ .#{$prefix}\:grow { flex-grow: 1; }
59
+ .#{$prefix}\:grow-0 { flex-grow: 0; }
60
+ .#{$prefix}\:shrink { flex-shrink: 1; }
61
+ .#{$prefix}\:shrink-0 { flex-shrink: 0; }
62
+
63
+ // Flex shorthand
64
+ .#{$prefix}\:flex-1 { flex: 1 1 0%; }
65
+ .#{$prefix}\:flex-auto { flex: 1 1 auto; }
66
+ .#{$prefix}\:flex-initial { flex: 0 1 auto; }
67
+ .#{$prefix}\:flex-none { flex: none; }
68
+
69
+ // -----------------------------------------------------------------------
70
+ // Grid template columns (1-12)
71
+ // -----------------------------------------------------------------------
72
+ @for $i from 1 through 12 {
73
+ .#{$prefix}\:grid-cols-#{$i} {
74
+ grid-template-columns: repeat(#{$i}, minmax(0, 1fr));
75
+ }
76
+ }
77
+ .#{$prefix}\:grid-cols-none { grid-template-columns: none; }
78
+
79
+ // Grid template rows (1-6)
80
+ @for $i from 1 through 6 {
81
+ .#{$prefix}\:grid-rows-#{$i} {
82
+ grid-template-rows: repeat(#{$i}, minmax(0, 1fr));
83
+ }
84
+ }
85
+
86
+ // Grid column span
87
+ .#{$prefix}\:col-auto { grid-column: auto; }
88
+ .#{$prefix}\:col-span-full { grid-column: 1 / -1; }
89
+ @for $i from 1 through 12 {
90
+ .#{$prefix}\:col-span-#{$i} { grid-column: span #{$i} / span #{$i}; }
91
+ }
92
+
93
+ // -----------------------------------------------------------------------
94
+ // Width utilities (fractional + keywords)
95
+ // -----------------------------------------------------------------------
96
+ .#{$prefix}\:w-full { width: 100%; }
97
+ .#{$prefix}\:w-auto { width: auto; }
98
+ .#{$prefix}\:w-screen { width: 100vw; }
99
+ .#{$prefix}\:w-min { width: min-content; }
100
+ .#{$prefix}\:w-max { width: max-content; }
101
+ .#{$prefix}\:w-fit { width: fit-content; }
102
+ .#{$prefix}\:w-1\/2 { width: 50%; }
103
+ .#{$prefix}\:w-1\/3 { width: 33.333333%; }
104
+ .#{$prefix}\:w-2\/3 { width: 66.666667%; }
105
+ .#{$prefix}\:w-1\/4 { width: 25%; }
106
+ .#{$prefix}\:w-3\/4 { width: 75%; }
107
+ .#{$prefix}\:w-1\/5 { width: 20%; }
108
+ .#{$prefix}\:w-2\/5 { width: 40%; }
109
+ .#{$prefix}\:w-3\/5 { width: 60%; }
110
+ .#{$prefix}\:w-4\/5 { width: 80%; }
111
+ .#{$prefix}\:w-1\/6 { width: 16.666667%; }
112
+ .#{$prefix}\:w-5\/6 { width: 83.333333%; }
113
+
114
+ // Height utilities (keywords)
115
+ .#{$prefix}\:h-full { height: 100%; }
116
+ .#{$prefix}\:h-auto { height: auto; }
117
+ .#{$prefix}\:h-screen { height: 100vh; }
118
+ .#{$prefix}\:h-min { height: min-content; }
119
+ .#{$prefix}\:h-max { height: max-content; }
120
+ .#{$prefix}\:h-fit { height: fit-content; }
121
+
122
+ // Max-width utilities
123
+ .#{$prefix}\:max-w-none { max-width: none; }
124
+ .#{$prefix}\:max-w-full { max-width: 100%; }
125
+ .#{$prefix}\:max-w-screen { max-width: 100vw; }
126
+ .#{$prefix}\:max-w-sm { max-width: 24rem; }
127
+ .#{$prefix}\:max-w-md { max-width: 28rem; }
128
+ .#{$prefix}\:max-w-lg { max-width: 32rem; }
129
+ .#{$prefix}\:max-w-xl { max-width: 36rem; }
130
+ .#{$prefix}\:max-w-2xl { max-width: 42rem; }
131
+ .#{$prefix}\:max-w-4xl { max-width: 56rem; }
132
+ .#{$prefix}\:max-w-7xl { max-width: 80rem; }
133
+
134
+ // -----------------------------------------------------------------------
135
+ // Text alignment
136
+ // -----------------------------------------------------------------------
137
+ .#{$prefix}\:text-left { text-align: left; }
138
+ .#{$prefix}\:text-center { text-align: center; }
139
+ .#{$prefix}\:text-right { text-align: right; }
140
+ .#{$prefix}\:text-justify { text-align: justify; }
141
+
142
+ // -----------------------------------------------------------------------
143
+ // Position
144
+ // -----------------------------------------------------------------------
145
+ .#{$prefix}\:static { position: static; }
146
+ .#{$prefix}\:relative { position: relative; }
147
+ .#{$prefix}\:absolute { position: absolute; }
148
+ .#{$prefix}\:fixed { position: fixed; }
149
+ .#{$prefix}\:sticky { position: sticky; }
150
+
151
+ // -----------------------------------------------------------------------
152
+ // Visibility
153
+ // -----------------------------------------------------------------------
154
+ .#{$prefix}\:visible { visibility: visible; }
155
+ .#{$prefix}\:invisible { visibility: hidden; }
156
+
157
+ // -----------------------------------------------------------------------
158
+ // Overflow
159
+ // -----------------------------------------------------------------------
160
+ .#{$prefix}\:overflow-auto { overflow: auto; }
161
+ .#{$prefix}\:overflow-hidden { overflow: hidden; }
162
+ .#{$prefix}\:overflow-visible { overflow: visible; }
163
+ .#{$prefix}\:overflow-scroll { overflow: scroll; }
164
+
165
+ // -----------------------------------------------------------------------
166
+ // Alignment (justify + align)
167
+ // -----------------------------------------------------------------------
168
+ .#{$prefix}\:justify-start { justify-content: flex-start; }
169
+ .#{$prefix}\:justify-end { justify-content: flex-end; }
170
+ .#{$prefix}\:justify-center { justify-content: center; }
171
+ .#{$prefix}\:justify-between { justify-content: space-between; }
172
+ .#{$prefix}\:justify-around { justify-content: space-around; }
173
+ .#{$prefix}\:justify-evenly { justify-content: space-evenly; }
174
+
175
+ .#{$prefix}\:align-items-start { align-items: flex-start; }
176
+ .#{$prefix}\:align-items-end { align-items: flex-end; }
177
+ .#{$prefix}\:align-items-center { align-items: center; }
178
+ .#{$prefix}\:align-items-baseline { align-items: baseline; }
179
+ .#{$prefix}\:align-items-stretch { align-items: stretch; }
180
+
181
+ .#{$prefix}\:align-self-auto { align-self: auto; }
182
+ .#{$prefix}\:align-self-start { align-self: flex-start; }
183
+ .#{$prefix}\:align-self-end { align-self: flex-end; }
184
+ .#{$prefix}\:align-self-center { align-self: center; }
185
+ .#{$prefix}\:align-self-stretch { align-self: stretch; }
186
+
187
+ // -----------------------------------------------------------------------
188
+ // Gap (key sizes: 0, 1, 2, 4, 6, 8 in rem-based steps)
189
+ // -----------------------------------------------------------------------
190
+ .#{$prefix}\:gap-0 { gap: 0; }
191
+ .#{$prefix}\:gap-1 { gap: 0.25rem; }
192
+ .#{$prefix}\:gap-2 { gap: 0.5rem; }
193
+ .#{$prefix}\:gap-3 { gap: 0.75rem; }
194
+ .#{$prefix}\:gap-4 { gap: 1rem; }
195
+ .#{$prefix}\:gap-6 { gap: 1.5rem; }
196
+ .#{$prefix}\:gap-8 { gap: 2rem; }
197
+ .#{$prefix}\:gap-12 { gap: 3rem; }
198
+
199
+ // -----------------------------------------------------------------------
200
+ // Padding (key sizes)
201
+ // -----------------------------------------------------------------------
202
+ .#{$prefix}\:p-0 { padding: 0; }
203
+ .#{$prefix}\:p-1 { padding: 0.25rem; }
204
+ .#{$prefix}\:p-2 { padding: 0.5rem; }
205
+ .#{$prefix}\:p-4 { padding: 1rem; }
206
+ .#{$prefix}\:p-6 { padding: 1.5rem; }
207
+ .#{$prefix}\:p-8 { padding: 2rem; }
208
+
209
+ .#{$prefix}\:px-0 { padding-left: 0; padding-right: 0; }
210
+ .#{$prefix}\:px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
211
+ .#{$prefix}\:px-4 { padding-left: 1rem; padding-right: 1rem; }
212
+ .#{$prefix}\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
213
+ .#{$prefix}\:px-8 { padding-left: 2rem; padding-right: 2rem; }
214
+
215
+ .#{$prefix}\:py-0 { padding-top: 0; padding-bottom: 0; }
216
+ .#{$prefix}\:py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
217
+ .#{$prefix}\:py-4 { padding-top: 1rem; padding-bottom: 1rem; }
218
+ .#{$prefix}\:py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; }
219
+ .#{$prefix}\:py-8 { padding-top: 2rem; padding-bottom: 2rem; }
220
+
221
+ // -----------------------------------------------------------------------
222
+ // Margin (key sizes)
223
+ // -----------------------------------------------------------------------
224
+ .#{$prefix}\:m-0 { margin: 0; }
225
+ .#{$prefix}\:m-auto { margin: auto; }
226
+ .#{$prefix}\:m-1 { margin: 0.25rem; }
227
+ .#{$prefix}\:m-2 { margin: 0.5rem; }
228
+ .#{$prefix}\:m-4 { margin: 1rem; }
229
+ .#{$prefix}\:m-8 { margin: 2rem; }
230
+
231
+ .#{$prefix}\:mx-auto { margin-left: auto; margin-right: auto; }
232
+ .#{$prefix}\:mx-0 { margin-left: 0; margin-right: 0; }
233
+ .#{$prefix}\:mx-2 { margin-left: 0.5rem; margin-right: 0.5rem; }
234
+ .#{$prefix}\:mx-4 { margin-left: 1rem; margin-right: 1rem; }
235
+
236
+ .#{$prefix}\:my-0 { margin-top: 0; margin-bottom: 0; }
237
+ .#{$prefix}\:my-2 { margin-top: 0.5rem; margin-bottom: 0.5rem; }
238
+ .#{$prefix}\:my-4 { margin-top: 1rem; margin-bottom: 1rem; }
239
+
240
+ .#{$prefix}\:mt-0 { margin-top: 0; }
241
+ .#{$prefix}\:mt-2 { margin-top: 0.5rem; }
242
+ .#{$prefix}\:mt-4 { margin-top: 1rem; }
243
+ .#{$prefix}\:mt-8 { margin-top: 2rem; }
244
+
245
+ .#{$prefix}\:mb-0 { margin-bottom: 0; }
246
+ .#{$prefix}\:mb-2 { margin-bottom: 0.5rem; }
247
+ .#{$prefix}\:mb-4 { margin-bottom: 1rem; }
248
+ .#{$prefix}\:mb-8 { margin-bottom: 2rem; }
249
+
250
+ // -----------------------------------------------------------------------
251
+ // Order
252
+ // -----------------------------------------------------------------------
253
+ .#{$prefix}\:order-first { order: -9999; }
254
+ .#{$prefix}\:order-last { order: 9999; }
255
+ .#{$prefix}\:order-none { order: 0; }
256
+ @for $i from 1 through 12 {
257
+ .#{$prefix}\:order-#{$i} { order: #{$i}; }
258
+ }
259
+
260
+ // -----------------------------------------------------------------------
261
+ // Opacity (key values)
262
+ // -----------------------------------------------------------------------
263
+ .#{$prefix}\:opacity-0 { opacity: 0; }
264
+ .#{$prefix}\:opacity-25 { opacity: 0.25; }
265
+ .#{$prefix}\:opacity-50 { opacity: 0.5; }
266
+ .#{$prefix}\:opacity-75 { opacity: 0.75; }
267
+ .#{$prefix}\:opacity-100 { opacity: 1; }
268
+
269
+ } // end @media
270
+ } // end @each
271
+
272
+ /* End responsive utilities */
@@ -0,0 +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
+ }
@@ -0,0 +1,33 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_scroll_spacing.scss
3
+ // Description: Completes scroll-margin and scroll-padding: every side (t, r, b, l, x, y) on the same steps as .scroll-m-4.
4
+ // Copyright: 2021-2026 Birdycom
5
+ // Author: Serge Cools
6
+ // Version: 0.4.0
7
+ // Framework: OmniaCSS
8
+ // Purpose: Generate .scroll-{m|p}-{12|16}, .scroll-{m|p}{t|r|b|l|x|y}-{0|1|2|8|12|16}.
9
+ // Note: .scroll-{m|p}{s|e}-* (logical) live in _layout_extras.scss; the -4 steps and .scroll-{m|p}-{0|1|2|4|8} in _interactivity.scss.
10
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-margin
11
+ // Map: scroll-margin sides -> scroll-padding sides -> scrollbar
12
+
13
+ $_scroll-steps: ('0': 0, '1': 0.25rem, '2': 0.5rem, '4': 1rem, '8': 2rem, '12': 3rem, '16': 4rem);
14
+ $_scroll-sides: (
15
+ 't': (top), 'r': (right), 'b': (bottom), 'l': (left),
16
+ 'x': (left, right), 'y': (top, bottom)
17
+ );
18
+
19
+ @each $prop, $letter in ('margin': 'm', 'padding': 'p') {
20
+ @each $key, $value in $_scroll-steps {
21
+ @if $key != '0' and $key != '1' and $key != '2' and $key != '4' and $key != '8' {
22
+ .scroll-#{$letter}-#{$key} { scroll-#{$prop}: $value; }
23
+ }
24
+ @each $side, $edges in $_scroll-sides {
25
+ // .scroll-m{x|y|t|r|b|l}-4 already exist (_interactivity.scss): skip the exact duplicates
26
+ @if $key != '4' {
27
+ .scroll-#{$letter}#{$side}-#{$key} {
28
+ @each $edge in $edges { scroll-#{$prop}-#{$edge}: $value; }
29
+ }
30
+ }
31
+ }
32
+ }
33
+ }