unigrid.css 0.3.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 (42) hide show
  1. package/README.md +101 -0
  2. package/dist/dropdown.js +36 -0
  3. package/dist/index.js +5 -0
  4. package/dist/scrollspy.js +57 -0
  5. package/dist/tabs.js +30 -0
  6. package/dist/unigrid.css +4501 -0
  7. package/dist/unigrid.js +124 -0
  8. package/dist/unigrid.min.css +1 -0
  9. package/dist/unigrid.min.js +1 -0
  10. package/package.json +41 -0
  11. package/src/js/dropdown.js +49 -0
  12. package/src/js/index.js +19 -0
  13. package/src/js/scrollspy.js +87 -0
  14. package/src/js/tabs.js +58 -0
  15. package/src/scss/_accordion.scss +123 -0
  16. package/src/scss/_broadside.scss +125 -0
  17. package/src/scss/_buttons.scss +241 -0
  18. package/src/scss/_card.scss +168 -0
  19. package/src/scss/_components.scss +140 -0
  20. package/src/scss/_container.scss +54 -0
  21. package/src/scss/_dropdown.scss +178 -0
  22. package/src/scss/_footer.scss +147 -0
  23. package/src/scss/_formats.scss +64 -0
  24. package/src/scss/_forms.scss +192 -0
  25. package/src/scss/_grid.scss +114 -0
  26. package/src/scss/_header.scss +169 -0
  27. package/src/scss/_hero.scss +262 -0
  28. package/src/scss/_mixins.scss +120 -0
  29. package/src/scss/_modules.scss +238 -0
  30. package/src/scss/_navbar.scss +341 -0
  31. package/src/scss/_pagination.scss +160 -0
  32. package/src/scss/_prose.scss +393 -0
  33. package/src/scss/_reset.scss +82 -0
  34. package/src/scss/_scrollspy.scss +62 -0
  35. package/src/scss/_section.scss +91 -0
  36. package/src/scss/_sidebar.scss +147 -0
  37. package/src/scss/_table.scss +122 -0
  38. package/src/scss/_tabs.scss +178 -0
  39. package/src/scss/_typography.scss +105 -0
  40. package/src/scss/_utilities.scss +79 -0
  41. package/src/scss/_variables.scss +183 -0
  42. package/src/scss/unigrid.scss +49 -0
@@ -0,0 +1,262 @@
1
+ // ==========================================================================
2
+ // Unigrid CSS Framework — Hero (BEM)
3
+ //
4
+ // Full-width hero section for page introductions. Supports background
5
+ // images, overlays, and flexible content positioning.
6
+ //
7
+ // Block: .ug-hero
8
+ // Elements: __background, __overlay, __content, __title, __subtitle,
9
+ // __lead, __actions
10
+ // Modifiers: --full, --half, --third, --dark, --light, --center, --bottom
11
+ // ==========================================================================
12
+
13
+
14
+ @use "variables" as *;
15
+ @use "mixins" as *;
16
+
17
+ .ug-hero {
18
+ position: relative;
19
+ display: flex;
20
+ flex-direction: column;
21
+ justify-content: flex-end;
22
+ width: 100%;
23
+ min-height: round(down, 50vh, var(--ug-leading));
24
+ padding: calc(var(--ug-leading) * 3) calc(var(--ug-leading) * 1.5);
25
+ color: $ug-white;
26
+ overflow: hidden;
27
+
28
+ // -- Background image --
29
+ &__background {
30
+ position: absolute;
31
+ inset: 0;
32
+ z-index: 0;
33
+
34
+ img,
35
+ video {
36
+ width: 100%;
37
+ height: 100%;
38
+ object-fit: cover;
39
+ }
40
+ }
41
+
42
+ // -- Overlay (darkens background for readability) --
43
+ &__overlay {
44
+ position: absolute;
45
+ inset: 0;
46
+ z-index: 1;
47
+ background: linear-gradient(
48
+ to top,
49
+ rgba(0, 0, 0, 0.7) 0%,
50
+ rgba(0, 0, 0, 0.2) 60%,
51
+ transparent 100%
52
+ );
53
+ }
54
+
55
+ // -- Content wrapper --
56
+ &__content {
57
+ position: relative;
58
+ z-index: 2;
59
+ max-width: $ug-container-max-width;
60
+ width: 100%;
61
+ }
62
+
63
+ // -- Title --
64
+ &__title {
65
+ @include ug-rhythm-font-size(2.5);
66
+ @include ug-rhythm-line-height(2);
67
+ @include ug-font-weight("black");
68
+ letter-spacing: -0.02em;
69
+ @include ug-rhythm-margin-bottom(1);
70
+ margin-top: 0;
71
+
72
+ @include ug-breakpoint-down("md") {
73
+ @include ug-rhythm-font-size(2);
74
+ }
75
+ }
76
+
77
+ // -- Subtitle --
78
+ &__subtitle {
79
+ @include ug-font-size("lg");
80
+ @include ug-font-weight("light");
81
+ @include ug-rhythm-line-height(1);
82
+ opacity: 0.85;
83
+ margin-bottom: 0;
84
+ margin-top: 0;
85
+ }
86
+
87
+ // -- Lead text --
88
+ &__lead {
89
+ @include ug-font-size("base");
90
+ @include ug-font-weight("regular");
91
+ @include ug-rhythm-line-height(1);
92
+ max-width: $ug-prose-max-width;
93
+ opacity: 0.8;
94
+ @include ug-rhythm-margin-bottom(1);
95
+ margin-top: 0;
96
+ }
97
+
98
+ // -- Action buttons area --
99
+ &__actions {
100
+ display: flex;
101
+ gap: var(--ug-leading);
102
+ flex-wrap: wrap;
103
+ @include ug-rhythm-margin-top(1);
104
+ }
105
+
106
+ // ==============================
107
+ // Height Modifiers
108
+ // ==============================
109
+
110
+ &--full {
111
+ min-height: round(down, 100vh, var(--ug-leading));
112
+ }
113
+
114
+ &--half {
115
+ min-height: round(down, 50vh, var(--ug-leading));
116
+ }
117
+
118
+ &--third {
119
+ min-height: round(down, 33vh, var(--ug-leading));
120
+ }
121
+
122
+ &--auto {
123
+ min-height: 0;
124
+ }
125
+
126
+ // ==============================
127
+ // Content Alignment
128
+ // ==============================
129
+
130
+ &--center {
131
+ justify-content: center;
132
+ align-items: center;
133
+ text-align: center;
134
+
135
+ .ug-hero__content {
136
+ display: flex;
137
+ flex-direction: column;
138
+ align-items: center;
139
+ }
140
+
141
+ .ug-hero__lead {
142
+ margin-left: auto;
143
+ margin-right: auto;
144
+ }
145
+
146
+ .ug-hero__actions {
147
+ justify-content: center;
148
+ }
149
+ }
150
+
151
+ &--bottom {
152
+ justify-content: flex-end;
153
+ }
154
+
155
+ &--top {
156
+ justify-content: flex-start;
157
+ }
158
+
159
+ // ==============================
160
+ // Color Variants
161
+ // ==============================
162
+
163
+ // Dark (default) — white text on dark background
164
+ &--dark {
165
+ background-color: $ug-black;
166
+ color: $ug-white;
167
+ }
168
+
169
+ // Light — dark text on light background
170
+ &--light {
171
+ background-color: $ug-warm-gray;
172
+ color: $ug-black;
173
+
174
+ .ug-hero__overlay {
175
+ background: linear-gradient(
176
+ to top,
177
+ rgba(255, 255, 255, 0.8) 0%,
178
+ rgba(255, 255, 255, 0.2) 60%,
179
+ transparent 100%
180
+ );
181
+ }
182
+ }
183
+
184
+ // NPS colors
185
+ &--brown {
186
+ background-color: $ug-brown;
187
+ }
188
+
189
+ &--green {
190
+ background-color: $ug-green;
191
+ }
192
+
193
+ &--blue {
194
+ background-color: $ug-blue;
195
+ }
196
+
197
+ &--red {
198
+ background-color: $ug-red;
199
+ }
200
+
201
+ // ==============================
202
+ // DIN Proportions
203
+ // ==============================
204
+
205
+ &--din {
206
+ @include ug-ratio-din(true);
207
+ min-height: 0;
208
+ // The DIN aspect ratio height is not a leading multiple.
209
+ // Round margin-bottom to snap the next element back onto the grid.
210
+ // Uses CSS round() (supported in modern browsers).
211
+ margin-bottom: calc(var(--ug-leading) - mod(100vw / #{$ug-ratio}, var(--ug-leading)));
212
+ }
213
+
214
+ // ==============================
215
+ // Responsive
216
+ // ==============================
217
+
218
+ @include ug-breakpoint-down("md") {
219
+ padding: calc(var(--ug-leading) * 2) var(--ug-leading);
220
+ min-height: round(down, 40vh, var(--ug-leading));
221
+
222
+ &--full {
223
+ min-height: round(down, 100vh, var(--ug-leading));
224
+ }
225
+ }
226
+ }
227
+
228
+ // ---- Hero Button ----
229
+ // Simple button for use within .ug-hero__actions
230
+
231
+ .ug-hero__btn {
232
+ display: inline-flex;
233
+ align-items: center;
234
+ justify-content: center;
235
+ gap: calc(var(--ug-leading) * 0.5);
236
+ height: calc(var(--ug-leading) * 1.5);
237
+ padding: 0 var(--ug-leading);
238
+ @include ug-font-size("sm");
239
+ @include ug-font-weight("bold");
240
+ text-decoration: none;
241
+ border: 2px solid currentColor;
242
+ background: transparent;
243
+ color: inherit;
244
+ cursor: pointer;
245
+ transition: background-color 0.15s, color 0.15s;
246
+
247
+ &:hover {
248
+ background-color: $ug-white;
249
+ color: $ug-black;
250
+ }
251
+
252
+ &--filled {
253
+ background-color: $ug-white;
254
+ color: $ug-black;
255
+ border-color: $ug-white;
256
+
257
+ &:hover {
258
+ background-color: transparent;
259
+ color: $ug-white;
260
+ }
261
+ }
262
+ }
@@ -0,0 +1,120 @@
1
+ // ==========================================================================
2
+ // Unigrid CSS Framework — Mixins
3
+ // ==========================================================================
4
+
5
+ @use "sass:map";
6
+ @use "sass:math";
7
+ @use "variables" as *;
8
+
9
+ // ---- Responsive Breakpoint ----
10
+ // Usage: @include ug-breakpoint("md") { ... }
11
+ @mixin ug-breakpoint($name) {
12
+ @if map.has-key($ug-breakpoints, $name) {
13
+ @media (min-width: map.get($ug-breakpoints, $name)) {
14
+ @content;
15
+ }
16
+ } @else {
17
+ @warn "Breakpoint '#{$name}' not found in $ug-breakpoints.";
18
+ }
19
+ }
20
+
21
+ // ---- Max-width Breakpoint ----
22
+ // Usage: @include ug-breakpoint-down("md") { ... }
23
+ @mixin ug-breakpoint-down($name) {
24
+ @if map.has-key($ug-breakpoints, $name) {
25
+ @media (max-width: map.get($ug-breakpoints, $name) - 1px) {
26
+ @content;
27
+ }
28
+ }
29
+ }
30
+
31
+ // ---- Font Size Helper ----
32
+ @mixin ug-font-size($size) {
33
+ @if map.has-key($ug-font-sizes, $size) {
34
+ font-size: map.get($ug-font-sizes, $size);
35
+ } @else {
36
+ font-size: $size;
37
+ }
38
+ }
39
+
40
+ // ---- Font Weight Helper ----
41
+ @mixin ug-font-weight($weight) {
42
+ @if map.has-key($ug-font-weights, $weight) {
43
+ font-weight: map.get($ug-font-weights, $weight);
44
+ } @else {
45
+ font-weight: $weight;
46
+ }
47
+ }
48
+
49
+ // ---- Spacing Helper ----
50
+ @function ug-space($n) {
51
+ @if map.has-key($ug-spaces, $n) {
52
+ @return map.get($ug-spaces, $n);
53
+ }
54
+ @return $n;
55
+ }
56
+
57
+ // ---- DIN Aspect Ratio ----
58
+ @mixin ug-ratio-din($landscape: false) {
59
+ @if $landscape {
60
+ aspect-ratio: #{$ug-ratio} #{"/"} 1;
61
+ } @else {
62
+ aspect-ratio: 1 #{"/"} #{$ug-ratio};
63
+ }
64
+ }
65
+
66
+ // ---- Truncate Text ----
67
+ @mixin ug-truncate {
68
+ overflow: hidden;
69
+ text-overflow: ellipsis;
70
+ white-space: nowrap;
71
+ }
72
+
73
+ // ---- Visually Hidden (accessible) ----
74
+ @mixin ug-sr-only {
75
+ position: absolute;
76
+ width: 1px;
77
+ height: 1px;
78
+ padding: 0;
79
+ margin: -1px;
80
+ overflow: hidden;
81
+ clip: rect(0, 0, 0, 0);
82
+ white-space: nowrap;
83
+ border: 0;
84
+ }
85
+
86
+ // ==========================================================================
87
+ // Vertical Rhythm Mixins (from Gutenberg)
88
+ // All vertical spacing uses var(--ug-leading) which adapts at the
89
+ // desktop breakpoint (26px mobile → 31px desktop).
90
+ // ==========================================================================
91
+
92
+ // ---- Rhythm Font Size ----
93
+ @mixin ug-rhythm-font-size($number) {
94
+ font-size: #{$number}rem;
95
+ }
96
+
97
+ // ---- Rhythm Line Height ----
98
+ @mixin ug-rhythm-line-height($number) {
99
+ line-height: calc(var(--ug-leading) * #{$number});
100
+ }
101
+
102
+ // ---- Rhythm Margin ----
103
+ @mixin ug-rhythm-margin-top($number) {
104
+ margin-top: calc(var(--ug-leading) * #{$number});
105
+ }
106
+
107
+ @mixin ug-rhythm-margin-bottom($number) {
108
+ margin-bottom: calc(var(--ug-leading) * #{$number});
109
+ }
110
+
111
+ // ---- Rhythm Padding ----
112
+ @mixin ug-rhythm-padding($top, $right, $bottom: null, $left: null) {
113
+ @if $bottom == null {
114
+ padding: calc(var(--ug-leading) * #{$top}) calc(var(--ug-leading) * #{$right});
115
+ } @else if $left == null {
116
+ padding: calc(var(--ug-leading) * #{$top}) calc(var(--ug-leading) * #{$right}) calc(var(--ug-leading) * #{$bottom});
117
+ } @else {
118
+ padding: calc(var(--ug-leading) * #{$top}) calc(var(--ug-leading) * #{$right}) calc(var(--ug-leading) * #{$bottom}) calc(var(--ug-leading) * #{$left});
119
+ }
120
+ }
@@ -0,0 +1,238 @@
1
+ // ==========================================================================
2
+ // Unigrid CSS Framework — Square Module System
3
+ //
4
+ // Inspired by Uniweb (Arlandi Design) and Vignelli's original Unigrid.
5
+ // The base unit "U" is a square module. All dimensions are multiples of U.
6
+ // Uses vw units for viewport-proportional sizing.
7
+ //
8
+ // Responsive column reduction: 3 → 4 → 6 → 8 → 12 (mobile-first)
9
+ //
10
+ // Usage:
11
+ // <div class="ug-modules">
12
+ // <div class="ug-module ug-module--1x1">Square</div>
13
+ // <div class="ug-module ug-module--1x2">Wide</div>
14
+ // </div>
15
+ //
16
+ // Block: .ug-modules (container)
17
+ // Block: .ug-module (individual module)
18
+ // Modifiers: --{h}x{w} for height × width in module units
19
+ // ==========================================================================
20
+
21
+ @use "sass:math";
22
+ @use "sass:map";
23
+ @use "variables" as *;
24
+ @use "mixins" as *;
25
+
26
+ // ---- Module Grid Configuration ----
27
+
28
+ $ug-module-grid: (
29
+ "xs": (cols: 3, gutter: 2.3810vw, module: 28.5714vw, margin: 4.7619vw, max-w: 3),
30
+ "sm": (cols: 4, gutter: 2.1277vw, module: 21.2766vw, margin: 4.2553vw, max-w: 4),
31
+ "md": (cols: 6, gutter: 1.7544vw, module: 14.0351vw, margin: 3.5088vw, max-w: 6),
32
+ "lg": (cols: 8, gutter: 1.4925vw, module: 10.4478vw, margin: 2.9851vw, max-w: 8),
33
+ "xl": (cols: 12, gutter: 1.1494vw, module: 6.8966vw, margin: 2.2989vw, max-w: 12),
34
+ ) !default;
35
+
36
+ $ug-module-max-height: 6;
37
+
38
+ // ---- Module Container ----
39
+
40
+ .ug-modules {
41
+ position: relative;
42
+ display: flex;
43
+ flex-wrap: wrap;
44
+ box-sizing: border-box;
45
+ width: 100%;
46
+
47
+ &--flush {
48
+ padding: 0;
49
+ }
50
+ }
51
+
52
+ // ---- Individual Module ----
53
+
54
+ .ug-module {
55
+ position: relative;
56
+ box-sizing: border-box;
57
+ overflow: hidden;
58
+ flex-shrink: 0;
59
+ }
60
+
61
+ // ---- Default (mobile / xs): 3 columns ----
62
+
63
+ $_xs: map.get($ug-module-grid, "xs");
64
+ $_xs-g: map.get($_xs, gutter);
65
+ $_xs-m: map.get($_xs, module);
66
+ $_xs-margin: map.get($_xs, margin);
67
+
68
+ .ug-modules {
69
+ padding: $_xs-g 0 0 $_xs-margin;
70
+ gap: $_xs-g;
71
+ }
72
+
73
+ .ug-module {
74
+ margin: 0;
75
+ }
76
+
77
+ @each $w in (1, 2, 3) {
78
+ @for $h from 1 through $ug-module-max-height {
79
+ .ug-module--#{$h}x#{$w} {
80
+ @if $h == 1 and $w == 1 {
81
+ height: $_xs-m;
82
+ width: $_xs-m;
83
+ } @else {
84
+ height: calc(#{$_xs-m} * #{$h} + #{$_xs-g} * #{$h - 1});
85
+ width: calc(#{$_xs-m} * #{$w} + #{$_xs-g} * #{$w - 1});
86
+ }
87
+ @if $h == 1 {
88
+ height: $_xs-m;
89
+ }
90
+ @if $w == 1 {
91
+ width: $_xs-m;
92
+ }
93
+ }
94
+ }
95
+ }
96
+
97
+ .ug-module--auto-height { height: auto; }
98
+ .ug-module--no-margin { margin-right: 0; }
99
+
100
+ // ---- Phablet (sm): 4 columns ----
101
+
102
+ @media screen and (min-width: 640px) {
103
+ $_sm: map.get($ug-module-grid, "sm");
104
+ $_sm-g: map.get($_sm, gutter);
105
+ $_sm-m: map.get($_sm, module);
106
+ $_sm-margin: map.get($_sm, margin);
107
+
108
+ .ug-modules { padding: $_sm-g 0 0 $_sm-margin; gap: $_sm-g; }
109
+ .ug-module { margin: 0; }
110
+
111
+ @each $w in (1, 2, 3, 4) {
112
+ @for $h from 1 through $ug-module-max-height {
113
+ .ug-module--#{$h}x#{$w},
114
+ .ug-module--sm-#{$h}x#{$w} {
115
+ @if $w == 1 {
116
+ height: calc(#{$_sm-m} * #{$h} + #{$_sm-g} * #{$h - 1});
117
+ width: $_sm-m;
118
+ } @else if $h == 1 {
119
+ height: $_sm-m;
120
+ width: calc(#{$_sm-m} * #{$w} + #{$_sm-g} * #{$w - 1});
121
+ } @else {
122
+ height: calc(#{$_sm-m} * #{$h} + #{$_sm-g} * #{$h - 1});
123
+ width: calc(#{$_sm-m} * #{$w} + #{$_sm-g} * #{$w - 1});
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ .ug-module--sm-auto-height { height: auto; }
130
+ .ug-module--sm-no-margin { margin-right: 0; }
131
+ }
132
+
133
+ // ---- Tablet (md): 6 columns ----
134
+
135
+ @media screen and (min-width: 1024px) {
136
+ $_md: map.get($ug-module-grid, "md");
137
+ $_md-g: map.get($_md, gutter);
138
+ $_md-m: map.get($_md, module);
139
+ $_md-margin: map.get($_md, margin);
140
+
141
+ .ug-modules { padding: $_md-g 0 0 $_md-margin; gap: $_md-g; }
142
+ .ug-module { margin: 0; }
143
+
144
+ @each $w in (1, 2, 3, 4, 6) {
145
+ @for $h from 1 through $ug-module-max-height {
146
+ .ug-module--#{$h}x#{$w},
147
+ .ug-module--md-#{$h}x#{$w} {
148
+ @if $w == 1 {
149
+ height: calc(#{$_md-m} * #{$h} + #{$_md-g} * #{$h - 1});
150
+ width: $_md-m;
151
+ } @else if $h == 1 {
152
+ height: $_md-m;
153
+ width: calc(#{$_md-m} * #{$w} + #{$_md-g} * #{$w - 1});
154
+ } @else {
155
+ height: calc(#{$_md-m} * #{$h} + #{$_md-g} * #{$h - 1});
156
+ width: calc(#{$_md-m} * #{$w} + #{$_md-g} * #{$w - 1});
157
+ }
158
+ }
159
+ }
160
+ }
161
+
162
+ .ug-module--md-auto-height { height: auto; }
163
+ .ug-module--md-no-margin { margin-right: 0; }
164
+ }
165
+
166
+ // ---- Laptop (lg): 8 columns ----
167
+
168
+ @media screen and (min-width: 1300px) {
169
+ $_lg: map.get($ug-module-grid, "lg");
170
+ $_lg-g: map.get($_lg, gutter);
171
+ $_lg-m: map.get($_lg, module);
172
+ $_lg-margin: map.get($_lg, margin);
173
+
174
+ .ug-modules { padding: $_lg-g 0 0 $_lg-margin; gap: $_lg-g; }
175
+ .ug-module { margin: 0; }
176
+
177
+ @each $w in (1, 2, 3, 4, 6, 8) {
178
+ @for $h from 1 through $ug-module-max-height {
179
+ .ug-module--#{$h}x#{$w},
180
+ .ug-module--lg-#{$h}x#{$w} {
181
+ @if $w == 1 {
182
+ height: calc(#{$_lg-m} * #{$h} + #{$_lg-g} * #{$h - 1});
183
+ width: $_lg-m;
184
+ } @else if $h == 1 {
185
+ height: $_lg-m;
186
+ width: calc(#{$_lg-m} * #{$w} + #{$_lg-g} * #{$w - 1});
187
+ } @else {
188
+ height: calc(#{$_lg-m} * #{$h} + #{$_lg-g} * #{$h - 1});
189
+ width: calc(#{$_lg-m} * #{$w} + #{$_lg-g} * #{$w - 1});
190
+ }
191
+ }
192
+ }
193
+ }
194
+
195
+ .ug-module--lg-auto-height { height: auto; }
196
+ .ug-module--lg-no-margin { margin-right: 0; }
197
+ }
198
+
199
+ // ---- Desktop (xl): 12 columns ----
200
+
201
+ @media screen and (min-width: 1600px) {
202
+ $_xl: map.get($ug-module-grid, "xl");
203
+ $_xl-g: map.get($_xl, gutter);
204
+ $_xl-m: map.get($_xl, module);
205
+ $_xl-margin: map.get($_xl, margin);
206
+
207
+ .ug-modules { padding: $_xl-g 0 0 $_xl-margin; gap: $_xl-g; }
208
+ .ug-module { margin: 0; }
209
+
210
+ @each $w in (1, 2, 3, 4, 6, 8, 12) {
211
+ @for $h from 1 through $ug-module-max-height {
212
+ .ug-module--#{$h}x#{$w},
213
+ .ug-module--xl-#{$h}x#{$w} {
214
+ @if $w == 1 {
215
+ height: calc(#{$_xl-m} * #{$h} + #{$_xl-g} * #{$h - 1});
216
+ width: $_xl-m;
217
+ } @else if $h == 1 {
218
+ height: $_xl-m;
219
+ width: calc(#{$_xl-m} * #{$w} + #{$_xl-g} * #{$w - 1});
220
+ } @else {
221
+ height: calc(#{$_xl-m} * #{$h} + #{$_xl-g} * #{$h - 1});
222
+ width: calc(#{$_xl-m} * #{$w} + #{$_xl-g} * #{$w - 1});
223
+ }
224
+ }
225
+ }
226
+ }
227
+
228
+ .ug-module--xl-auto-height { height: auto; }
229
+ .ug-module--xl-no-margin { margin-right: 0; }
230
+ }
231
+
232
+ // ---- Responsive Visibility ----
233
+
234
+ .ug-module--hidden-xl { @media screen and (min-width: 1600px) { display: none; } }
235
+ .ug-module--hidden-lg { @media screen and (min-width: 1300px) and (max-width: 1599px) { display: none; } }
236
+ .ug-module--hidden-md { @media screen and (min-width: 1024px) and (max-width: 1299px) { display: none; } }
237
+ .ug-module--hidden-sm { @media screen and (min-width: 640px) and (max-width: 1023px) { display: none; } }
238
+ .ug-module--hidden-xs { @media screen and (max-width: 639px) { display: none; } }