@birdycom/omniacss 0.0.0-stage → 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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -3
  3. package/dist/oc-colors.css +4429 -0
  4. package/dist/oc-theme.css +69 -0
  5. package/dist/omnia.css +465436 -0
  6. package/dist/omnia.min.css +2 -0
  7. package/dist/omnia.starter.css +13461 -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 +63 -6
  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 +50 -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,22 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_index.scss
3
+ // Description: file for using @forward and @use in are utilities map
4
+ // Copyright: 2021-2022 Birdycom
5
+ // Autor: Serge Cools
6
+ // Version: 0.2.0
7
+ // Framework: OmniaCSS
8
+
9
+
10
+ @forward "../variables/variables";
11
+ @forward "../config/omniacss.config";
12
+ @forward "../functions/functions";
13
+ @forward "../variables/modifiers";
14
+ @forward "../variables/variables_effects";
15
+ @forward "../variables/color_tone";
16
+ @forward "../variables/variables_colors_omnia";
17
+ @forward "../variables/variables_colors_ral";
18
+ @forward "../variables/variables_colors_html";
19
+ @forward "../variables/variables_typography";
20
+ @forward "../variables/variables_layout";
21
+ @forward "../variables/variables_flex_grid";
22
+ @forward "../variables/mixins";
@@ -0,0 +1,198 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_interactivity.scss
3
+ // Map: accent/appearance/caret/scheme/cursor/pointer -> resize/scroll -> touch/select/will-change
4
+ // -> field-sizing -> base-select -> reading-flow -> scroll-markers -> overflow-anchor -> print
5
+
6
+ /* Accent color */
7
+ .accent-auto { accent-color: auto; }
8
+ .accent-blue { accent-color: var(--color-vividblue-95); }
9
+ .accent-red { accent-color: var(--color-red-60); }
10
+ .accent-green { accent-color: var(--color-green-40); }
11
+
12
+ /* Appearance */
13
+ .appearance-none { appearance: none; }
14
+ .appearance-auto { appearance: auto; }
15
+
16
+ /* Caret color */
17
+ .caret-auto { caret-color: auto; }
18
+ .caret-transparent { caret-color: transparent; }
19
+ .caret-blue { caret-color: var(--color-vividblue-95); }
20
+ .caret-red { caret-color: var(--color-red-60); }
21
+ .caret-green { caret-color: var(--color-green-40); }
22
+
23
+ /* Color scheme */
24
+ .scheme-normal { color-scheme: normal; }
25
+ .scheme-light { color-scheme: light; }
26
+ .scheme-dark { color-scheme: dark; }
27
+ .scheme-light-dark { color-scheme: light dark; }
28
+ .scheme-only-light { color-scheme: only light; }
29
+
30
+ /* Cursor */
31
+ .cursor-auto { cursor: auto; }
32
+ .cursor-default { cursor: default; }
33
+ .cursor-pointer { cursor: pointer; }
34
+ .cursor-wait { cursor: wait; }
35
+ .cursor-text { cursor: text; }
36
+ .cursor-move { cursor: move; }
37
+ .cursor-help { cursor: help; }
38
+ .cursor-not-allowed { cursor: not-allowed; }
39
+ .cursor-grab { cursor: grab; }
40
+ .cursor-grabbing { cursor: grabbing; }
41
+ .cursor-crosshair { cursor: crosshair; }
42
+
43
+ /* Pointer events */
44
+ .pointer-events-none { pointer-events: none; }
45
+ .pointer-events-auto { pointer-events: auto; }
46
+
47
+ /* Resize */
48
+ .resize-none { resize: none; }
49
+ .resize { resize: both; }
50
+ .resize-x { resize: horizontal; }
51
+ .resize-y { resize: vertical; }
52
+
53
+ /* Scroll behavior */
54
+ .scroll-auto { scroll-behavior: auto; }
55
+ .scroll-smooth { scroll-behavior: smooth; }
56
+
57
+ /* Scroll margin */
58
+ .scroll-m-0 { scroll-margin: 0; }
59
+ .scroll-m-1 { scroll-margin: 0.25rem; }
60
+ .scroll-m-2 { scroll-margin: 0.5rem; }
61
+ .scroll-m-4 { scroll-margin: 1rem; }
62
+ .scroll-m-8 { scroll-margin: 2rem; }
63
+ .scroll-mx-4 { scroll-margin-left: 1rem; scroll-margin-right: 1rem; }
64
+ .scroll-my-4 { scroll-margin-top: 1rem; scroll-margin-bottom: 1rem; }
65
+ .scroll-mt-4 { scroll-margin-top: 1rem; }
66
+ .scroll-mr-4 { scroll-margin-right: 1rem; }
67
+ .scroll-mb-4 { scroll-margin-bottom: 1rem; }
68
+ .scroll-ml-4 { scroll-margin-left: 1rem; }
69
+
70
+ /* Scroll padding */
71
+ .scroll-p-0 { scroll-padding: 0; }
72
+ .scroll-p-1 { scroll-padding: 0.25rem; }
73
+ .scroll-p-2 { scroll-padding: 0.5rem; }
74
+ .scroll-p-4 { scroll-padding: 1rem; }
75
+ .scroll-p-8 { scroll-padding: 2rem; }
76
+ .scroll-px-4 { scroll-padding-left: 1rem; scroll-padding-right: 1rem; }
77
+ .scroll-py-4 { scroll-padding-top: 1rem; scroll-padding-bottom: 1rem; }
78
+ .scroll-pt-4 { scroll-padding-top: 1rem; }
79
+ .scroll-pr-4 { scroll-padding-right: 1rem; }
80
+ .scroll-pb-4 { scroll-padding-bottom: 1rem; }
81
+ .scroll-pl-4 { scroll-padding-left: 1rem; }
82
+
83
+ /* Scroll snap */
84
+ .snap-start { scroll-snap-align: start; }
85
+ .snap-end { scroll-snap-align: end; }
86
+ .snap-center { scroll-snap-align: center; }
87
+ .snap-align-none { scroll-snap-align: none; }
88
+ .snap-normal { scroll-snap-stop: normal; }
89
+ .snap-always { scroll-snap-stop: always; }
90
+ .snap-none { scroll-snap-type: none; }
91
+ .snap-x { scroll-snap-type: x mandatory; }
92
+ .snap-y { scroll-snap-type: y mandatory; }
93
+ .snap-both { scroll-snap-type: both mandatory; }
94
+ .snap-proximity { scroll-snap-type: both proximity; }
95
+
96
+ /* Touch action */
97
+ .touch-auto { touch-action: auto; }
98
+ .touch-none { touch-action: none; }
99
+ .touch-pan-x { touch-action: pan-x; }
100
+ .touch-pan-left { touch-action: pan-left; }
101
+ .touch-pan-right { touch-action: pan-right; }
102
+ .touch-pan-y { touch-action: pan-y; }
103
+ .touch-pan-up { touch-action: pan-up; }
104
+ .touch-pan-down { touch-action: pan-down; }
105
+ .touch-pinch-zoom { touch-action: pinch-zoom; }
106
+ .touch-manipulation { touch-action: manipulation; }
107
+
108
+ /* User select */
109
+ .select-none { user-select: none; }
110
+ .select-text { user-select: text; }
111
+ .select-all { user-select: all; }
112
+ .select-auto { user-select: auto; }
113
+
114
+ /* Will change */
115
+ .will-change-auto { will-change: auto; }
116
+ .will-change-scroll { will-change: scroll-position; }
117
+ .will-change-contents { will-change: contents; }
118
+ .will-change-transform { will-change: transform; }
119
+
120
+ /* Color scheme — only dark */
121
+ .scheme-only-dark { color-scheme: only dark; }
122
+
123
+ /* Field sizing — let form controls grow with their content */
124
+ .field-sizing-content { field-sizing: content; }
125
+ .field-sizing-fixed { field-sizing: fixed; }
126
+
127
+ /* Customizable select */
128
+ .appearance-base-select { appearance: base-select; }
129
+ .appearance-base-select::picker(select) { appearance: base-select; }
130
+
131
+ /* Reading flow — keyboard/screen reader order follows the visual layout */
132
+ .reading-flow-normal { reading-flow: normal; }
133
+ .reading-flow-flex-visual { reading-flow: flex-visual; }
134
+ .reading-flow-flex-flow { reading-flow: flex-flow; }
135
+ .reading-flow-grid-rows { reading-flow: grid-rows; }
136
+ .reading-flow-grid-columns { reading-flow: grid-columns; }
137
+ .reading-flow-grid-order { reading-flow: grid-order; }
138
+ .reading-flow-source-order { reading-flow: source-order; }
139
+
140
+ /* Scroll markers — CSS-only carousel navigation dots */
141
+ .scroll-markers-none { scroll-marker-group: none; }
142
+ .scroll-markers-before { scroll-marker-group: before; }
143
+ .scroll-markers-after { scroll-marker-group: after; }
144
+ /* Default look of the generated dots (Omnia colors); the active one follows the scroll position. */
145
+ :is(.scroll-markers-before, .scroll-markers-after)::scroll-marker-group {
146
+ display: flex;
147
+ gap: 0.5rem;
148
+ justify-content: center;
149
+ padding: 0.6rem;
150
+ }
151
+ :is(.scroll-markers-before, .scroll-markers-after) > *::scroll-marker {
152
+ content: "";
153
+ display: block;
154
+ inline-size: 0.7rem;
155
+ block-size: 0.7rem;
156
+ border-radius: 50%;
157
+ background: oklch(from var(--color-mistblue-80) l c h / 0.6);
158
+ }
159
+ :is(.scroll-markers-before, .scroll-markers-after) > *::scroll-marker:target-current {
160
+ background: var(--color-vividblue-80);
161
+ }
162
+
163
+ /* Scroll buttons — CSS-only previous/next arrows on a scroll container (::scroll-button()) */
164
+ .scroll-buttons {
165
+ anchor-name: --oc-scroller;
166
+ anchor-scope: --oc-scroller;
167
+ }
168
+ .scroll-buttons::scroll-button(*) {
169
+ position: absolute;
170
+ position-anchor: --oc-scroller;
171
+ top: anchor(center);
172
+ translate: 0 -50%;
173
+ display: grid;
174
+ place-items: center;
175
+ inline-size: 2.25rem;
176
+ aspect-ratio: 1;
177
+ border: 0;
178
+ border-radius: 50%;
179
+ background: oklch(from var(--color-mistblue-95) l c h / 0.75);
180
+ color: var(--color-white-50);
181
+ font-size: 1rem;
182
+ cursor: pointer;
183
+ }
184
+ .scroll-buttons::scroll-button(*):disabled { opacity: 0.3; cursor: default; }
185
+ .scroll-buttons::scroll-button(*):focus-visible { outline: 2px solid var(--color-vividblue-80); outline-offset: 2px; }
186
+ .scroll-buttons::scroll-button(inline-start) { content: "\2039" / "Previous"; left: calc(anchor(left) + 0.5rem); }
187
+ .scroll-buttons::scroll-button(inline-end) { content: "\203A" / "Next"; right: calc(anchor(right) + 0.5rem); }
188
+
189
+ /* Overflow anchor — scroll anchoring */
190
+ .overflow-anchor-auto { overflow-anchor: auto; }
191
+ .overflow-anchor-none { overflow-anchor: none; }
192
+
193
+ /* Print color adjust */
194
+ .print-exact { print-color-adjust: exact; }
195
+ .print-economy { print-color-adjust: economy; }
196
+
197
+ /* Will change — opacity */
198
+ .will-change-opacity { will-change: opacity; }
@@ -0,0 +1,24 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_layering.scss
3
+ // Map: isolation -> visibility -> z-index
4
+
5
+ /* Isolation utilities */
6
+
7
+ .isolate { isolation: isolate; }
8
+ .isolation-auto { isolation: auto; }
9
+
10
+ /* Visibility utilities */
11
+
12
+ .visible { visibility: visible; }
13
+ .invisible { visibility: hidden; }
14
+ .collapse { visibility: collapse; }
15
+
16
+ /* Z-index utilities */
17
+
18
+ .z-auto { z-index: auto; }
19
+ .z-0 { z-index: 0; }
20
+ .z-10 { z-index: 10; }
21
+ .z-20 { z-index: 20; }
22
+ .z-30 { z-index: 30; }
23
+ .z-40 { z-index: 40; }
24
+ .z-50 { z-index: 50; }
@@ -0,0 +1,171 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_layout_extras.scss
3
+ // Description: Layout properties that were still missing: inset shorthand, logical inset/min/max sizes,
4
+ // flex-flow, grid areas, margin-trim, logical overflow/overscroll/scroll spacing, safe areas,
5
+ // zoom, container shorthand, all, empty-cells, image-orientation and background-position axes.
6
+ // Copyright: 2021-2026 Birdycom
7
+ // Author: Serge Cools
8
+ // Version: 0.3.0
9
+ // Framework: OmniaCSS
10
+ // Purpose: Generate .inset-*, .inset-x-*, .inset-y-*, .inset-bs-*/.inset-be-*, .min-inline-*/.max-block-* …,
11
+ // .flex-flow-*, .grid-areas-*, .area-*, .margin-trim-*, .overflow-inline-*/.overflow-block-*,
12
+ // .overflow-clip-margin-*, .overscroll-inline-*/.overscroll-block-*, .scroll-m-inline-*, .scroll-ms-*, .scroll-p-block-* …,
13
+ // .p-safe*/.m-safe*, .zoom-*, .cq-card, .all-*, .empty-cells-*, .image-orientation-*, .bg-pos-x-*/.bg-pos-y-*.
14
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/inset
15
+ // Map: inset -> logical inset/sizes -> flex-flow -> grid areas -> margin-trim -> overflow axes -> overscroll axes
16
+ // -> logical scroll spacing -> safe areas -> zoom -> container -> all -> empty-cells -> image-orientation -> bg axes
17
+
18
+ $_space: ('0': 0, '1': 0.25rem, '2': 0.5rem, '4': 1rem, '8': 2rem, 'auto': auto, 'full': 100%);
19
+
20
+ /* Inset shorthand (top/right/bottom/left at once) */
21
+ @each $k, $v in $_space {
22
+ .inset-#{$k} { inset: $v; }
23
+ .inset-x-#{$k} { left: $v; right: $v; }
24
+ .inset-y-#{$k} { top: $v; bottom: $v; }
25
+ .inset-bs-#{$k} { inset-block-start: $v; }
26
+ .inset-be-#{$k} { inset-block-end: $v; }
27
+ }
28
+
29
+ /* Logical min/max sizes */
30
+ @each $k, $v in ('0': 0, 'full': 100%, 'fit': fit-content, 'min': min-content, 'max': max-content, 'none': none) {
31
+ @if $k != 'none' {
32
+ .min-inline-#{$k} { min-inline-size: $v; }
33
+ .min-block-#{$k} { min-block-size: $v; }
34
+ }
35
+ @if $k != '0' {
36
+ .max-inline-#{$k} { max-inline-size: $v; }
37
+ .max-block-#{$k} { max-block-size: $v; }
38
+ }
39
+ }
40
+
41
+ /* Flex flow (direction + wrap in one) */
42
+ .flex-flow-row { flex-flow: row nowrap; }
43
+ .flex-flow-row-wrap { flex-flow: row wrap; }
44
+ .flex-flow-col { flex-flow: column nowrap; }
45
+ .flex-flow-col-wrap { flex-flow: column wrap; }
46
+ .flex-flow-row-reverse-wrap { flex-flow: row-reverse wrap; }
47
+
48
+ /* Grid template areas + grid-area (named layout) */
49
+ .grid-areas-holy-grail {
50
+ grid-template-areas: "header header" "sidebar main" "footer footer";
51
+ grid-template-columns: minmax(10rem, 1fr) 3fr;
52
+ }
53
+ .grid-areas-stack { grid-template-areas: "header" "main" "sidebar" "footer"; }
54
+ .grid-areas-none { grid-template-areas: none; }
55
+ .grid-template-none { grid-template: none; }
56
+ .grid-none { grid: none; }
57
+ @each $area in (header, sidebar, main, footer) {
58
+ .area-#{$area} { grid-area: $area; }
59
+ }
60
+ .area-auto { grid-area: auto; }
61
+ .area-full { grid-area: 1 / 1 / -1 / -1; }
62
+
63
+ /* Margin trim — remove child margins at the container edges */
64
+ .margin-trim-none { margin-trim: none; }
65
+ .margin-trim-block { margin-trim: block; }
66
+ .margin-trim-inline { margin-trim: inline; }
67
+
68
+ /* Logical overflow axes */
69
+ @each $v in (auto, hidden, clip, visible, scroll) {
70
+ .overflow-inline-#{$v} { overflow-inline: $v; }
71
+ .overflow-block-#{$v} { overflow-block: $v; }
72
+ }
73
+ .overflow-clip-margin-0 { overflow-clip-margin: 0; }
74
+ .overflow-clip-margin-2 { overflow-clip-margin: 0.5rem; }
75
+ .overflow-clip-margin-4 { overflow-clip-margin: 1rem; }
76
+ .overflow-clip-margin-content { overflow-clip-margin: content-box; }
77
+
78
+ /* Logical overscroll behavior */
79
+ @each $v in (auto, contain, none) {
80
+ .overscroll-inline-#{$v} { overscroll-behavior-inline: $v; }
81
+ .overscroll-block-#{$v} { overscroll-behavior-block: $v; }
82
+ }
83
+
84
+ /* Logical scroll margin / padding (s = inline-start, e = inline-end, bs/be = block-start/end) */
85
+ @each $k, $v in ('0': 0, '2': 0.5rem, '4': 1rem, '8': 2rem) {
86
+ .scroll-m-inline-#{$k} { scroll-margin-inline: $v; }
87
+ .scroll-m-block-#{$k} { scroll-margin-block: $v; }
88
+ .scroll-ms-#{$k} { scroll-margin-inline-start: $v; }
89
+ .scroll-me-#{$k} { scroll-margin-inline-end: $v; }
90
+ .scroll-mbs-#{$k} { scroll-margin-block-start: $v; }
91
+ .scroll-mbe-#{$k} { scroll-margin-block-end: $v; }
92
+ .scroll-p-inline-#{$k} { scroll-padding-inline: $v; }
93
+ .scroll-p-block-#{$k} { scroll-padding-block: $v; }
94
+ .scroll-ps-#{$k} { scroll-padding-inline-start: $v; }
95
+ .scroll-pe-#{$k} { scroll-padding-inline-end: $v; }
96
+ .scroll-pbs-#{$k} { scroll-padding-block-start: $v; }
97
+ .scroll-pbe-#{$k} { scroll-padding-block-end: $v; }
98
+ }
99
+
100
+ /* Safe areas (notch / home indicator) — needs <meta name="viewport" content="viewport-fit=cover"> */
101
+ .p-safe { padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); }
102
+ .pt-safe { padding-top: env(safe-area-inset-top); }
103
+ .pb-safe { padding-bottom: env(safe-area-inset-bottom); }
104
+ .pl-safe { padding-left: env(safe-area-inset-left); }
105
+ .pr-safe { padding-right: env(safe-area-inset-right); }
106
+ .mb-safe { margin-bottom: env(safe-area-inset-bottom); }
107
+ .h-screen-safe { height: calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom)); }
108
+
109
+ /* Zoom */
110
+ @each $z in (50, 75, 100, 125, 150) {
111
+ .zoom-#{$z} { zoom: #{$z * 1%}; }
112
+ }
113
+
114
+ /* Container shorthand (name / type) */
115
+ .cq-card { container: card / inline-size; }
116
+ .cq-main { container: main / inline-size; }
117
+ .cq-sidebar { container: sidebar / inline-size; }
118
+
119
+ /* all — reset every property */
120
+ .all-initial { all: initial; }
121
+ .all-inherit { all: inherit; }
122
+ .all-unset { all: unset; }
123
+ .all-revert { all: revert; }
124
+ .all-revert-layer { all: revert-layer; }
125
+
126
+ /* Table empty cells */
127
+ .empty-cells-show { empty-cells: show; }
128
+ .empty-cells-hide { empty-cells: hide; }
129
+
130
+ /* Image orientation (EXIF) */
131
+ .image-orientation-from-image { image-orientation: from-image; }
132
+ .image-orientation-none { image-orientation: none; }
133
+
134
+ /* Background position per axis */
135
+ @each $k, $v in ('left': left, 'center': center, 'right': right, '0': 0%, '50': 50%, '100': 100%) {
136
+ .bg-pos-x-#{$k} { background-position-x: $v; }
137
+ }
138
+ @each $k, $v in ('top': top, 'center': center, 'bottom': bottom, '0': 0%, '50': 50%, '100': 100%) {
139
+ .bg-pos-y-#{$k} { background-position-y: $v; }
140
+ }
141
+
142
+ /* Mask shorthand — fade out content */
143
+ .mask-reset { mask: none; }
144
+ .mask-fade-b { mask: linear-gradient(#000 60%, transparent); }
145
+ .mask-fade-r { mask: linear-gradient(to right, #000 60%, transparent); }
146
+ .mask-fade-x { mask: linear-gradient(to right, transparent, #000 15%, #000 85%, transparent); }
147
+
148
+ /* Paged media — named pages for print (@page landscape sets the sheet orientation) */
149
+ .page-auto { page: auto; }
150
+ .page-landscape { page: landscape; }
151
+ @page landscape {
152
+ size: landscape;
153
+ }
154
+
155
+ /* position-try shorthand (order + fallbacks) */
156
+ .anchor-try-most-height-flip { position-try: most-height flip-block, flip-inline; }
157
+
158
+ /* SVG geometry properties (responsive shapes inside <svg>) */
159
+ @each $k, $v in ('0': 0, '25': 25%, '50': 50%, '100': 100%) {
160
+ .cx-#{$k} { cx: $v; }
161
+ .cy-#{$k} { cy: $v; }
162
+ .x-#{$k} { x: $v; }
163
+ .y-#{$k} { y: $v; }
164
+ }
165
+ .r-25 { r: 25%; }
166
+ .r-50 { r: 50%; }
167
+ .rx-0 { rx: 0; }
168
+ .rx-4 { rx: 4px; }
169
+ .ry-0 { ry: 0; }
170
+ .ry-4 { ry: 4px; }
171
+ .d-none { display: none; }
@@ -0,0 +1,210 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_layout_flow.scss
3
+ // Map: columns -> break -> box-decoration -> float/clear -> object -> inset -> order
4
+ // -> column rule/span/fill -> orphans/widows -> image-rendering -> dynamic-range-limit
5
+
6
+ /* Columns */
7
+ .columns-1 { columns: 1; }
8
+ .columns-2 { columns: 2; }
9
+ .columns-3 { columns: 3; }
10
+ .columns-4 { columns: 4; }
11
+ .columns-5 { columns: 5; }
12
+ .columns-6 { columns: 6; }
13
+ .columns-auto { columns: auto; }
14
+ .columns-3xs { columns: 16rem; }
15
+ .columns-2xs { columns: 18rem; }
16
+ .columns-xs { columns: 20rem; }
17
+ .columns-sm { columns: 24rem; }
18
+ .columns-md { columns: 28rem; }
19
+ .columns-lg { columns: 32rem; }
20
+
21
+ /* Break before/after/inside */
22
+ .break-before-auto { break-before: auto; }
23
+ .break-before-avoid { break-before: avoid; }
24
+ .break-before-all { break-before: all; }
25
+ .break-before-page { break-before: page; }
26
+ .break-before-column { break-before: column; }
27
+ .break-before-left { break-before: left; }
28
+ .break-before-right { break-before: right; }
29
+
30
+ .break-after-auto { break-after: auto; }
31
+ .break-after-avoid { break-after: avoid; }
32
+ .break-after-all { break-after: all; }
33
+ .break-after-page { break-after: page; }
34
+ .break-after-column { break-after: column; }
35
+ .break-after-left { break-after: left; }
36
+ .break-after-right { break-after: right; }
37
+
38
+ .break-inside-auto { break-inside: auto; }
39
+ .break-inside-avoid { break-inside: avoid; }
40
+ .break-inside-avoid-page { break-inside: avoid-page; }
41
+ .break-inside-avoid-column { break-inside: avoid-column; }
42
+
43
+ /* Box decoration break */
44
+ .box-decoration-slice { box-decoration-break: slice; }
45
+ .box-decoration-clone { box-decoration-break: clone; }
46
+
47
+ /* Float and clear */
48
+ .float-start { float: inline-start; }
49
+ .float-end { float: inline-end; }
50
+ .float-right { float: right; }
51
+ .float-left { float: left; }
52
+ .float-none { float: none; }
53
+
54
+ .clear-start { clear: inline-start; }
55
+ .clear-end { clear: inline-end; }
56
+ .clear-left { clear: left; }
57
+ .clear-right { clear: right; }
58
+ .clear-both { clear: both; }
59
+ .clear-none { clear: none; }
60
+
61
+ /* Object fit and position */
62
+ .object-contain { object-fit: contain; }
63
+ .object-cover { object-fit: cover; }
64
+ .object-fill { object-fit: fill; }
65
+ .object-none { object-fit: none; }
66
+ .object-scale-down { object-fit: scale-down; }
67
+
68
+ .object-center { object-position: center; }
69
+ .object-top { object-position: top; }
70
+ .object-bottom { object-position: bottom; }
71
+ .object-left { object-position: left; }
72
+ .object-right { object-position: right; }
73
+ .object-left-top { object-position: left top; }
74
+ .object-left-bottom { object-position: left bottom; }
75
+ .object-right-top { object-position: right top; }
76
+ .object-right-bottom { object-position: right bottom; }
77
+
78
+ /* Inset (top/right/bottom/left) */
79
+ .top-auto { top: auto; }
80
+ .top-0 { top: 0; }
81
+ .top-1 { top: 0.25rem; }
82
+ .top-2 { top: 0.5rem; }
83
+ .top-4 { top: 1rem; }
84
+ .top-8 { top: 2rem; }
85
+ .top-1\/2 { top: 50%; }
86
+ .top-1\/3 { top: 33.333333%; }
87
+ .top-2\/3 { top: 66.666667%; }
88
+ .top-1\/4 { top: 25%; }
89
+ .top-3\/4 { top: 75%; }
90
+ .top-full { top: 100%; }
91
+
92
+ .right-auto { right: auto; }
93
+ .right-0 { right: 0; }
94
+ .right-1 { right: 0.25rem; }
95
+ .right-2 { right: 0.5rem; }
96
+ .right-4 { right: 1rem; }
97
+ .right-8 { right: 2rem; }
98
+ .right-1\/2 { right: 50%; }
99
+ .right-1\/3 { right: 33.333333%; }
100
+ .right-2\/3 { right: 66.666667%; }
101
+ .right-1\/4 { right: 25%; }
102
+ .right-3\/4 { right: 75%; }
103
+ .right-full { right: 100%; }
104
+
105
+ .bottom-auto { bottom: auto; }
106
+ .bottom-0 { bottom: 0; }
107
+ .bottom-1 { bottom: 0.25rem; }
108
+ .bottom-2 { bottom: 0.5rem; }
109
+ .bottom-4 { bottom: 1rem; }
110
+ .bottom-8 { bottom: 2rem; }
111
+ .bottom-1\/2 { bottom: 50%; }
112
+ .bottom-1\/3 { bottom: 33.333333%; }
113
+ .bottom-2\/3 { bottom: 66.666667%; }
114
+ .bottom-1\/4 { bottom: 25%; }
115
+ .bottom-3\/4 { bottom: 75%; }
116
+ .bottom-full { bottom: 100%; }
117
+
118
+ .left-auto { left: auto; }
119
+ .left-0 { left: 0; }
120
+ .left-1 { left: 0.25rem; }
121
+ .left-2 { left: 0.5rem; }
122
+ .left-4 { left: 1rem; }
123
+ .left-8 { left: 2rem; }
124
+ .left-1\/2 { left: 50%; }
125
+ .left-1\/3 { left: 33.333333%; }
126
+ .left-2\/3 { left: 66.666667%; }
127
+ .left-1\/4 { left: 25%; }
128
+ .left-3\/4 { left: 75%; }
129
+ .left-full { left: 100%; }
130
+
131
+ /* Order */
132
+ .order-first { order: -9999; }
133
+ .order-last { order: 9999; }
134
+ .order-none { order: 0; }
135
+ .order-1 { order: 1; }
136
+ .order-2 { order: 2; }
137
+ .order-3 { order: 3; }
138
+ .order-4 { order: 4; }
139
+ .order-5 { order: 5; }
140
+ .order-6 { order: 6; }
141
+ .order-7 { order: 7; }
142
+ .order-8 { order: 8; }
143
+ .order-9 { order: 9; }
144
+ .order-10 { order: 10; }
145
+ .order-11 { order: 11; }
146
+ .order-12 { order: 12; }
147
+
148
+ /* Column count / width aliases (documented in docs/columns) */
149
+ .cols-1 { column-count: 1; }
150
+ .cols-2 { column-count: 2; }
151
+ .cols-3 { column-count: 3; }
152
+ .cols-4 { column-count: 4; }
153
+ .cols-5 { column-count: 5; }
154
+ .cols-6 { column-count: 6; }
155
+ .cols-auto { column-count: auto; }
156
+ .col-w-auto { column-width: auto; }
157
+ .col-w-16 { column-width: 16rem; }
158
+ .col-w-20 { column-width: 20rem; }
159
+ .col-w-24 { column-width: 24rem; }
160
+
161
+ /* Column rule, span and fill */
162
+ .col-rule-none { column-rule-style: none; }
163
+ .col-rule-solid { column-rule-style: solid; }
164
+ .col-rule-dashed { column-rule-style: dashed; }
165
+ .col-rule-dotted { column-rule-style: dotted; }
166
+ .col-rule-1 { column-rule-width: 1px; }
167
+ .col-rule-2 { column-rule-width: 2px; }
168
+ .col-rule-4 { column-rule-width: 4px; }
169
+ .col-rule-current { column-rule-color: currentcolor; }
170
+ .col-span-all { column-span: all; }
171
+ .col-span-none { column-span: none; }
172
+ .col-fill-auto { column-fill: auto; }
173
+ .col-fill-balance { column-fill: balance; }
174
+
175
+ /* Break avoid page/column */
176
+ .break-before-avoid-page { break-before: avoid-page; }
177
+ .break-before-avoid-column { break-before: avoid-column; }
178
+ .break-after-avoid-page { break-after: avoid-page; }
179
+ .break-after-avoid-column { break-after: avoid-column; }
180
+
181
+ /* Box decoration break aliases */
182
+ .decoration-slice { box-decoration-break: slice; }
183
+ .decoration-clone { box-decoration-break: clone; }
184
+
185
+ /* Orphans and widows */
186
+ .orphans-1 { orphans: 1; }
187
+ .orphans-2 { orphans: 2; }
188
+ .orphans-3 { orphans: 3; }
189
+ .orphans-4 { orphans: 4; }
190
+ .widows-1 { widows: 1; }
191
+ .widows-2 { widows: 2; }
192
+ .widows-3 { widows: 3; }
193
+ .widows-4 { widows: 4; }
194
+
195
+ /* Object position aliases */
196
+ .object-top-left { object-position: top left; }
197
+ .object-top-right { object-position: top right; }
198
+ .object-bottom-left { object-position: bottom left; }
199
+ .object-bottom-right { object-position: bottom right; }
200
+
201
+ /* Image rendering */
202
+ .image-auto { image-rendering: auto; }
203
+ .image-smooth { image-rendering: smooth; }
204
+ .image-crisp { image-rendering: crisp-edges; }
205
+ .image-pixelated { image-rendering: pixelated; }
206
+
207
+ /* Dynamic range limit (HDR images/video) */
208
+ .dynamic-range-standard { dynamic-range-limit: standard; }
209
+ .dynamic-range-constrained { dynamic-range-limit: constrained; }
210
+ .dynamic-range-no-limit { dynamic-range-limit: no-limit; }
@@ -0,0 +1,62 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_mask_extras.scss
3
+ // Description: More mask utilities — edge fades, composable linear/radial masks with stop positions, and the missing
4
+ // position, size, clip and mode keywords next to the .mask-* classes of _effects_advanced.scss.
5
+ // Copyright: 2021-2026 Birdycom
6
+ // Author: Serge Cools
7
+ // Version: 0.4.0
8
+ // Framework: OmniaCSS
9
+ // Purpose: Generate .mask-fade-{t|l|y}, .mask-linear-{deg}, .mask-radial-{circle|ellipse}, .mask-from-{n}, .mask-to-{n},
10
+ // .mask-position-{side|corner}, .mask-size-{n}, .mask-clip-no-clip, .mask-mode-match-source, .mask-composite-*.
11
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/mask
12
+ // Note: .mask-linear-* / .mask-radial-* fade from opaque to transparent between --oc-mask-from and --oc-mask-to;
13
+ // move the stops with .mask-from-{n} / .mask-to-{n}: class="mask-linear-180 mask-from-60".
14
+ // Map: edge fades -> composable gradient masks -> position -> size -> clip and mode
15
+
16
+ /* Edge fades (.mask-fade-b, -r and -x live in _layout_extras.scss) */
17
+ .mask-fade-t { mask: linear-gradient(to top, black 60%, transparent); }
18
+ .mask-fade-l { mask: linear-gradient(to left, black 60%, transparent); }
19
+ .mask-fade-y { mask: linear-gradient(to bottom, transparent, black 15%, black 85%, transparent); }
20
+
21
+ /* Composable gradient masks */
22
+ @each $deg in (0, 45, 90, 135, 180, 225, 270, 315) {
23
+ .mask-linear-#{$deg} {
24
+ mask-image: linear-gradient(#{$deg}deg, black var(--oc-mask-from, 0%), transparent var(--oc-mask-to, 100%));
25
+ }
26
+ }
27
+ .mask-radial-circle {
28
+ mask-image: radial-gradient(circle, black var(--oc-mask-from, 0%), transparent var(--oc-mask-to, 100%));
29
+ }
30
+ .mask-radial-ellipse {
31
+ mask-image: radial-gradient(ellipse, black var(--oc-mask-from, 0%), transparent var(--oc-mask-to, 100%));
32
+ }
33
+ .mask-conic {
34
+ mask-image: conic-gradient(black var(--oc-mask-from, 0%), transparent var(--oc-mask-to, 100%));
35
+ }
36
+ @each $n in (0, 10, 20, 25, 30, 40, 50, 60, 70, 75, 80, 90, 100) {
37
+ .mask-from-#{$n} { --oc-mask-from: #{$n}%; }
38
+ .mask-to-#{$n} { --oc-mask-to: #{$n}%; }
39
+ }
40
+
41
+ /* Mask position */
42
+ $_mask-positions: ('left': left, 'right': right, 'left-top': left top, 'right-top': right top, 'left-bottom': left bottom, 'right-bottom': right bottom);
43
+ @each $key, $value in $_mask-positions {
44
+ .mask-position-#{$key} { mask-position: $value; }
45
+ }
46
+
47
+ /* Mask repeat */
48
+ .mask-repeat-x { mask-repeat: repeat-x; }
49
+ .mask-repeat-y { mask-repeat: repeat-y; }
50
+ .mask-repeat-space { mask-repeat: space; }
51
+ .mask-repeat-round { mask-repeat: round; }
52
+
53
+ /* Mask size in percent and rem */
54
+ @each $n in (25, 50, 75, 100) {
55
+ .mask-size-#{$n} { mask-size: #{$n}%; }
56
+ }
57
+
58
+ /* Mask clip, mode, composite and reset */
59
+ .mask-clip-no-clip { mask-clip: no-clip; }
60
+ .mask-clip-text { mask-clip: text; }
61
+ .mask-mode-match-source { mask-mode: match-source; }
62
+ .mask-composite-source-over { mask-composite: add; }