@wpmoo/ui 2.1.1 → 2.2.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 (40) hide show
  1. package/README.md +23 -2
  2. package/THIRD_PARTY_NOTICES.md +1 -1
  3. package/certification.json +2 -1
  4. package/dist/assets/css/moo-ui.css +429 -1
  5. package/dist/assets/css/moo-ui.min.css +2 -2
  6. package/dist/assets/css/moo.css +349 -1
  7. package/dist/assets/css/moo.min.css +2 -2
  8. package/dist/js/chart.js +1 -1
  9. package/dist/js/chart.min.js +1 -1
  10. package/dist/js/combobox.js +1 -1
  11. package/dist/js/context-menu.js +1 -1
  12. package/dist/js/datatable.js +1 -1
  13. package/dist/js/datepicker.js +1 -1
  14. package/dist/js/datepicker.min.js +1 -1
  15. package/dist/js/floating-panel.js +1 -1
  16. package/dist/js/image-gallery.js +247 -0
  17. package/dist/js/moo-ui.js +238 -1
  18. package/dist/js/moo-ui.min.js +2 -2
  19. package/dist/js/overlay-scrollbar.js +1 -1
  20. package/dist/js/password-requirements.js +1 -1
  21. package/dist/js/sheet.js +1 -1
  22. package/dist/js/sidebar.js +1 -1
  23. package/dist/js/slider.js +1 -1
  24. package/dist/js/state.js +1 -1
  25. package/dist/js/table-of-contents.js +1 -1
  26. package/dist/js/toc.js +1 -1
  27. package/dist/release-manifest.json +4 -4
  28. package/package.json +3 -1
  29. package/scss/_components.scss +2 -0
  30. package/scss/components/_gallery.scss +73 -0
  31. package/scss/components/_item.scss +96 -0
  32. package/scss/foundations/_globals.scss +1 -0
  33. package/scss/foundations/_scope.scss +2 -0
  34. package/scss/mixins/_banner.scss +1 -1
  35. package/scss/moo-core.scss +1 -0
  36. package/scss/moo-ui.scss +2 -0
  37. package/scss/settings/_component_variables.scss +8 -0
  38. package/scss/utilities/_gallery.scss +25 -0
  39. package/scss/utilities/_motion.scss +5 -0
  40. package/scss/utilities/_motion_primitives.scss +10 -0
package/README.md CHANGED
@@ -195,6 +195,21 @@ application-owned, account-specific key when appropriate. This is a local UI
195
195
  preference, not authorization or server-side task state. See the
196
196
  [Card example](https://ui.wpmoo.org/components/card/#floating-panel) for markup.
197
197
 
198
+ For the Image Gallery block, bind its lightbox after Bootstrap's Modal and
199
+ Carousel are available on the document's window:
200
+
201
+ ```js
202
+ import { initImageGalleries } from "@wpmoo/ui/image-gallery.js";
203
+ const release = initImageGalleries(document);
204
+ // release(); // remove the listeners again
205
+ ```
206
+
207
+ Without the module every thumbnail still links to its large image. With it the
208
+ lightbox opens at the clicked photo, keeps the counter and caption current,
209
+ runs the slideshow and full-screen buttons, adds arrow keys and loads only the
210
+ current photo and its neighbours. See the
211
+ [Image Gallery block](https://ui.wpmoo.org/blocks/image-gallery/) for markup.
212
+
198
213
  For an opt-in document overlay scrollbar, load the stylesheet first and pass
199
214
  the resolved page theme owner explicitly:
200
215
 
@@ -275,6 +290,12 @@ calm.
275
290
 
276
291
  ## Status And Support
277
292
 
293
+ The `2.2.0` minor release adds the Item component, Image Gallery and Video
294
+ Dialog blocks, and component usage guides. Image Gallery includes five layouts,
295
+ a lazy-loaded lightbox, slideshow and full-screen controls through the optional
296
+ `@wpmoo/ui/image-gallery.js` module. The catalog adds structured metadata,
297
+ content-derived page dates and a browsable sitemap.
298
+
278
299
  The `2.1.1` patch release improves Chart tooltips, DataTable sorting
279
300
  and selection, Combobox input, Context Menu disposal, Date Picker controls,
280
301
  and Sidebar keyboard navigation. Page titles follow their owner heading weight.
@@ -307,7 +328,7 @@ paths live in the [Installation guide](https://ui.wpmoo.org/installation/).
307
328
  Moo UI source code is MIT licensed. License details live in
308
329
  [LICENSE](LICENSE) and the [License page](https://ui.wpmoo.org/license/).
309
330
  Third-party distribution details and notices are kept separately in
310
- [THIRD_PARTY_NOTICES.md](https://github.com/wpmoo-org/ui/blob/v2.1.1/THIRD_PARTY_NOTICES.md).
331
+ [THIRD_PARTY_NOTICES.md](https://github.com/wpmoo-org/ui/blob/v2.2.0/THIRD_PARTY_NOTICES.md).
311
332
  Catalog visual assets and their license are repository-only and are not
312
333
  included in the npm package. Asset terms live in the
313
- [visual asset license](https://github.com/wpmoo-org/ui/blob/v2.1.1/ASSET_LICENSE.md).
334
+ [visual asset license](https://github.com/wpmoo-org/ui/blob/v2.2.0/ASSET_LICENSE.md).
@@ -83,5 +83,5 @@ The catalog serves its native ESM file and unchanged license separately under
83
83
  WPMoo-generated visual assets, including image assets under `site/static/images/`,
84
84
  are original WPMoo work and are not licensed under MIT unless explicitly
85
85
  stated. See the
86
- [repository visual asset license](https://github.com/wpmoo-org/ui/blob/v2.1.1/ASSET_LICENSE.md).
86
+ [repository visual asset license](https://github.com/wpmoo-org/ui/blob/v2.2.0/ASSET_LICENSE.md).
87
87
  These assets and their license file are not included in the npm package.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "0.1",
3
3
  "status": "preview",
4
- "coreVersion": "2.1.1",
4
+ "coreVersion": "2.2.0",
5
5
  "bootstrap": {
6
6
  "canonicalVersion": "5.3.3",
7
7
  "targetRange": ">=5.3.0 <5.4",
@@ -34,6 +34,7 @@
34
34
  "./table-of-contents.js",
35
35
  "./sheet.js",
36
36
  "./floating-panel.js",
37
+ "./image-gallery.js",
37
38
  "./chart.js",
38
39
  "./chart.min.js",
39
40
  "./datepicker.js",
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Moo UI v2.1.1 (https://wpmoo.org/)
2
+ * Moo UI v2.2.0 (https://wpmoo.org/)
3
3
  * Copyright 2026 WPMoo Authors
4
4
  * Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
5
5
  *
@@ -4238,6 +4238,10 @@ progress {
4238
4238
  --bs-aspect-ratio: calc(9 / 21 * 100%);
4239
4239
  }
4240
4240
 
4241
+ .ratio-3x2 {
4242
+ --bs-aspect-ratio: calc(2 / 3 * 100%);
4243
+ }
4244
+
4241
4245
  .fixed-top {
4242
4246
  position: fixed;
4243
4247
  top: 0;
@@ -6360,6 +6364,22 @@ progress {
6360
6364
  z-index: 3 !important;
6361
6365
  }
6362
6366
 
6367
+ .columns-1 {
6368
+ column-count: 1 !important;
6369
+ }
6370
+
6371
+ .columns-2 {
6372
+ column-count: 2 !important;
6373
+ }
6374
+
6375
+ .columns-3 {
6376
+ column-count: 3 !important;
6377
+ }
6378
+
6379
+ .columns-4 {
6380
+ column-count: 4 !important;
6381
+ }
6382
+
6363
6383
  @media (min-width: 576px) {
6364
6384
  .float-sm-start {
6365
6385
  float: left !important;
@@ -6909,6 +6929,18 @@ progress {
6909
6929
  .text-sm-center {
6910
6930
  text-align: center !important;
6911
6931
  }
6932
+ .columns-sm-1 {
6933
+ column-count: 1 !important;
6934
+ }
6935
+ .columns-sm-2 {
6936
+ column-count: 2 !important;
6937
+ }
6938
+ .columns-sm-3 {
6939
+ column-count: 3 !important;
6940
+ }
6941
+ .columns-sm-4 {
6942
+ column-count: 4 !important;
6943
+ }
6912
6944
  }
6913
6945
 
6914
6946
  @media (min-width: 768px) {
@@ -7460,6 +7492,18 @@ progress {
7460
7492
  .text-md-center {
7461
7493
  text-align: center !important;
7462
7494
  }
7495
+ .columns-md-1 {
7496
+ column-count: 1 !important;
7497
+ }
7498
+ .columns-md-2 {
7499
+ column-count: 2 !important;
7500
+ }
7501
+ .columns-md-3 {
7502
+ column-count: 3 !important;
7503
+ }
7504
+ .columns-md-4 {
7505
+ column-count: 4 !important;
7506
+ }
7463
7507
  }
7464
7508
 
7465
7509
  @media (min-width: 992px) {
@@ -8011,6 +8055,18 @@ progress {
8011
8055
  .text-lg-center {
8012
8056
  text-align: center !important;
8013
8057
  }
8058
+ .columns-lg-1 {
8059
+ column-count: 1 !important;
8060
+ }
8061
+ .columns-lg-2 {
8062
+ column-count: 2 !important;
8063
+ }
8064
+ .columns-lg-3 {
8065
+ column-count: 3 !important;
8066
+ }
8067
+ .columns-lg-4 {
8068
+ column-count: 4 !important;
8069
+ }
8014
8070
  }
8015
8071
 
8016
8072
  @media (min-width: 1200px) {
@@ -8562,6 +8618,18 @@ progress {
8562
8618
  .text-xl-center {
8563
8619
  text-align: center !important;
8564
8620
  }
8621
+ .columns-xl-1 {
8622
+ column-count: 1 !important;
8623
+ }
8624
+ .columns-xl-2 {
8625
+ column-count: 2 !important;
8626
+ }
8627
+ .columns-xl-3 {
8628
+ column-count: 3 !important;
8629
+ }
8630
+ .columns-xl-4 {
8631
+ column-count: 4 !important;
8632
+ }
8565
8633
  }
8566
8634
 
8567
8635
  @media (min-width: 1400px) {
@@ -9113,6 +9181,18 @@ progress {
9113
9181
  .text-xxl-center {
9114
9182
  text-align: center !important;
9115
9183
  }
9184
+ .columns-xxl-1 {
9185
+ column-count: 1 !important;
9186
+ }
9187
+ .columns-xxl-2 {
9188
+ column-count: 2 !important;
9189
+ }
9190
+ .columns-xxl-3 {
9191
+ column-count: 3 !important;
9192
+ }
9193
+ .columns-xxl-4 {
9194
+ column-count: 4 !important;
9195
+ }
9116
9196
  }
9117
9197
 
9118
9198
  @media (min-width: 1200px) {
@@ -9226,6 +9306,16 @@ progress {
9226
9306
  }
9227
9307
  }
9228
9308
 
9309
+ @keyframes moo-breathe {
9310
+ 0%,
9311
+ 100% {
9312
+ transform: scale(0.9);
9313
+ }
9314
+ 50% {
9315
+ transform: scale(1);
9316
+ }
9317
+ }
9318
+
9229
9319
  html.scrollbar-overlay-native {
9230
9320
  scrollbar-width: none;
9231
9321
  }
@@ -13394,6 +13484,86 @@ label.btn {
13394
13484
  gap: 0.5rem;
13395
13485
  }
13396
13486
 
13487
+ /* Item */
13488
+ .item {
13489
+ display: flex;
13490
+ flex-wrap: wrap;
13491
+ align-items: center;
13492
+ gap: 1rem;
13493
+ min-width: 0;
13494
+ padding: 0.75rem 1rem;
13495
+ color: var(--bs-body-color);
13496
+ text-decoration: none;
13497
+ border: var(--bs-border-width) solid transparent;
13498
+ border-radius: var(--bs-border-radius-lg);
13499
+ }
13500
+ .item-outline {
13501
+ border-color: var(--bs-border-color);
13502
+ }
13503
+ .item-muted {
13504
+ background-color: var(--bs-tertiary-bg);
13505
+ }
13506
+ .item-sm {
13507
+ gap: 0.75rem;
13508
+ padding: 0.5rem 0.75rem;
13509
+ }
13510
+ a.item:hover {
13511
+ color: var(--bs-body-color);
13512
+ background-color: var(--bs-tertiary-bg);
13513
+ }
13514
+ .item-media {
13515
+ display: flex;
13516
+ flex-shrink: 0;
13517
+ align-items: center;
13518
+ justify-content: center;
13519
+ align-self: flex-start;
13520
+ }
13521
+ .item-media-icon {
13522
+ width: 2.35547rem;
13523
+ height: 2.35547rem;
13524
+ color: var(--bs-body-color);
13525
+ background-color: var(--bs-tertiary-bg);
13526
+ border: var(--bs-border-width) solid var(--bs-border-color);
13527
+ border-radius: var(--bs-border-radius);
13528
+ }
13529
+ .item-media-icon > [data-icon] {
13530
+ width: 1rem;
13531
+ height: 1rem;
13532
+ }
13533
+ .item-content {
13534
+ display: flex;
13535
+ flex: 1 1 0;
13536
+ flex-direction: column;
13537
+ gap: 0.25rem;
13538
+ min-width: 0;
13539
+ }
13540
+ .item-title {
13541
+ margin: 0;
13542
+ font-size: 0.76562rem;
13543
+ font-weight: 500;
13544
+ line-height: 1.25;
13545
+ }
13546
+ .item-description {
13547
+ margin: 0;
13548
+ font-size: 0.76562rem;
13549
+ line-height: 1.5;
13550
+ color: var(--bs-secondary-color);
13551
+ }
13552
+ .item-actions {
13553
+ display: flex;
13554
+ flex-wrap: wrap;
13555
+ align-items: center;
13556
+ gap: 0.5rem;
13557
+ }
13558
+ .item-group {
13559
+ display: flex;
13560
+ flex-direction: column;
13561
+ gap: 0.5rem;
13562
+ padding: 0;
13563
+ margin: 0;
13564
+ list-style: none;
13565
+ }
13566
+
13397
13567
  /* Table */
13398
13568
  .card .table {
13399
13569
  --bs-table-bg: transparent;
@@ -16827,6 +16997,174 @@ label.btn {
16827
16997
  .datatable--release-review {
16828
16998
  --moo-datatable-min-width: 64rem;
16829
16999
  }
17000
+ .gallery-justified {
17001
+ --moo-gallery-row-height: 6rem;
17002
+ display: flex;
17003
+ flex-wrap: wrap;
17004
+ }
17005
+ @media (min-width: 768px) {
17006
+ .gallery-justified {
17007
+ --moo-gallery-row-height: 8rem;
17008
+ }
17009
+ }
17010
+ .gallery-justified > * {
17011
+ flex: var(--moo-gallery-ratio, 1) 1 calc(var(--moo-gallery-ratio, 1) * var(--moo-gallery-row-height));
17012
+ aspect-ratio: var(--moo-gallery-ratio, 1);
17013
+ }
17014
+ .gallery-justified::after {
17015
+ flex-grow: 1e9;
17016
+ content: "";
17017
+ }
17018
+ .gallery-stage {
17019
+ height: min(62svh, 38rem);
17020
+ }
17021
+ .gallery-strip {
17022
+ display: flex;
17023
+ --moo-gallery-strip-height: 13rem;
17024
+ flex-wrap: nowrap;
17025
+ overflow-x: auto;
17026
+ scroll-snap-type: x proximity;
17027
+ contain: inline-size;
17028
+ }
17029
+ .gallery-strip > * {
17030
+ flex: none;
17031
+ width: calc(var(--moo-gallery-ratio, 1) * var(--moo-gallery-strip-height));
17032
+ max-width: 85%;
17033
+ height: var(--moo-gallery-strip-height);
17034
+ scroll-snap-align: start;
17035
+ }
17036
+ .gallery-strip::after {
17037
+ content: none;
17038
+ }
17039
+ .gallery-strip.gallery-strip-bleed {
17040
+ margin-inline: calc(-1 * var(--moo-gallery-strip-bleed, 0.75rem));
17041
+ padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17042
+ scroll-padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17043
+ }
17044
+ @media (max-width: 575.98px) {
17045
+ .gallery-strip-sm-down {
17046
+ --moo-gallery-strip-height: 13rem;
17047
+ flex-wrap: nowrap;
17048
+ overflow-x: auto;
17049
+ scroll-snap-type: x proximity;
17050
+ contain: inline-size;
17051
+ }
17052
+ .gallery-strip-sm-down > * {
17053
+ flex: none;
17054
+ width: calc(var(--moo-gallery-ratio, 1) * var(--moo-gallery-strip-height));
17055
+ max-width: 85%;
17056
+ height: var(--moo-gallery-strip-height);
17057
+ scroll-snap-align: start;
17058
+ }
17059
+ .gallery-strip-sm-down::after {
17060
+ content: none;
17061
+ }
17062
+ .gallery-strip-sm-down.gallery-strip-bleed {
17063
+ margin-inline: calc(-1 * var(--moo-gallery-strip-bleed, 0.75rem));
17064
+ padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17065
+ scroll-padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17066
+ }
17067
+ }
17068
+ @media (max-width: 767.98px) {
17069
+ .gallery-strip-md-down {
17070
+ --moo-gallery-strip-height: 13rem;
17071
+ flex-wrap: nowrap;
17072
+ overflow-x: auto;
17073
+ scroll-snap-type: x proximity;
17074
+ contain: inline-size;
17075
+ }
17076
+ .gallery-strip-md-down > * {
17077
+ flex: none;
17078
+ width: calc(var(--moo-gallery-ratio, 1) * var(--moo-gallery-strip-height));
17079
+ max-width: 85%;
17080
+ height: var(--moo-gallery-strip-height);
17081
+ scroll-snap-align: start;
17082
+ }
17083
+ .gallery-strip-md-down::after {
17084
+ content: none;
17085
+ }
17086
+ .gallery-strip-md-down.gallery-strip-bleed {
17087
+ margin-inline: calc(-1 * var(--moo-gallery-strip-bleed, 0.75rem));
17088
+ padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17089
+ scroll-padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17090
+ }
17091
+ }
17092
+ @media (max-width: 991.98px) {
17093
+ .gallery-strip-lg-down {
17094
+ --moo-gallery-strip-height: 13rem;
17095
+ flex-wrap: nowrap;
17096
+ overflow-x: auto;
17097
+ scroll-snap-type: x proximity;
17098
+ contain: inline-size;
17099
+ }
17100
+ .gallery-strip-lg-down > * {
17101
+ flex: none;
17102
+ width: calc(var(--moo-gallery-ratio, 1) * var(--moo-gallery-strip-height));
17103
+ max-width: 85%;
17104
+ height: var(--moo-gallery-strip-height);
17105
+ scroll-snap-align: start;
17106
+ }
17107
+ .gallery-strip-lg-down::after {
17108
+ content: none;
17109
+ }
17110
+ .gallery-strip-lg-down.gallery-strip-bleed {
17111
+ margin-inline: calc(-1 * var(--moo-gallery-strip-bleed, 0.75rem));
17112
+ padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17113
+ scroll-padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17114
+ }
17115
+ }
17116
+ @media (max-width: 1199.98px) {
17117
+ .gallery-strip-xl-down {
17118
+ --moo-gallery-strip-height: 13rem;
17119
+ flex-wrap: nowrap;
17120
+ overflow-x: auto;
17121
+ scroll-snap-type: x proximity;
17122
+ contain: inline-size;
17123
+ }
17124
+ .gallery-strip-xl-down > * {
17125
+ flex: none;
17126
+ width: calc(var(--moo-gallery-ratio, 1) * var(--moo-gallery-strip-height));
17127
+ max-width: 85%;
17128
+ height: var(--moo-gallery-strip-height);
17129
+ scroll-snap-align: start;
17130
+ }
17131
+ .gallery-strip-xl-down::after {
17132
+ content: none;
17133
+ }
17134
+ .gallery-strip-xl-down.gallery-strip-bleed {
17135
+ margin-inline: calc(-1 * var(--moo-gallery-strip-bleed, 0.75rem));
17136
+ padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17137
+ scroll-padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17138
+ }
17139
+ }
17140
+ @media (max-width: 1399.98px) {
17141
+ .gallery-strip-xxl-down {
17142
+ --moo-gallery-strip-height: 13rem;
17143
+ flex-wrap: nowrap;
17144
+ overflow-x: auto;
17145
+ scroll-snap-type: x proximity;
17146
+ contain: inline-size;
17147
+ }
17148
+ .gallery-strip-xxl-down > * {
17149
+ flex: none;
17150
+ width: calc(var(--moo-gallery-ratio, 1) * var(--moo-gallery-strip-height));
17151
+ max-width: 85%;
17152
+ height: var(--moo-gallery-strip-height);
17153
+ scroll-snap-align: start;
17154
+ }
17155
+ .gallery-strip-xxl-down::after {
17156
+ content: none;
17157
+ }
17158
+ .gallery-strip-xxl-down.gallery-strip-bleed {
17159
+ margin-inline: calc(-1 * var(--moo-gallery-strip-bleed, 0.75rem));
17160
+ padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17161
+ scroll-padding-inline: var(--moo-gallery-strip-bleed, 0.75rem);
17162
+ }
17163
+ }
17164
+ .gallery-progress {
17165
+ --bs-progress-height: var(--moo-gallery-progress-height, 0.25rem);
17166
+ opacity: var(--moo-gallery-progress-opacity, 0.08);
17167
+ }
16830
17168
 
16831
17169
  /* Focus and keyboard navigation */
16832
17170
  .form-label,
@@ -16970,6 +17308,91 @@ label.btn {
16970
17308
  text-align: center !important;
16971
17309
  }
16972
17310
  }
17311
+ .ratio-3x2 {
17312
+ --bs-aspect-ratio: calc(2 / 3 * 100%);
17313
+ }
17314
+ .columns-1 {
17315
+ column-count: 1 !important;
17316
+ }
17317
+ .columns-2 {
17318
+ column-count: 2 !important;
17319
+ }
17320
+ .columns-3 {
17321
+ column-count: 3 !important;
17322
+ }
17323
+ .columns-4 {
17324
+ column-count: 4 !important;
17325
+ }
17326
+ @media (min-width: 576px) {
17327
+ .columns-sm-1 {
17328
+ column-count: 1 !important;
17329
+ }
17330
+ .columns-sm-2 {
17331
+ column-count: 2 !important;
17332
+ }
17333
+ .columns-sm-3 {
17334
+ column-count: 3 !important;
17335
+ }
17336
+ .columns-sm-4 {
17337
+ column-count: 4 !important;
17338
+ }
17339
+ }
17340
+ @media (min-width: 768px) {
17341
+ .columns-md-1 {
17342
+ column-count: 1 !important;
17343
+ }
17344
+ .columns-md-2 {
17345
+ column-count: 2 !important;
17346
+ }
17347
+ .columns-md-3 {
17348
+ column-count: 3 !important;
17349
+ }
17350
+ .columns-md-4 {
17351
+ column-count: 4 !important;
17352
+ }
17353
+ }
17354
+ @media (min-width: 992px) {
17355
+ .columns-lg-1 {
17356
+ column-count: 1 !important;
17357
+ }
17358
+ .columns-lg-2 {
17359
+ column-count: 2 !important;
17360
+ }
17361
+ .columns-lg-3 {
17362
+ column-count: 3 !important;
17363
+ }
17364
+ .columns-lg-4 {
17365
+ column-count: 4 !important;
17366
+ }
17367
+ }
17368
+ @media (min-width: 1200px) {
17369
+ .columns-xl-1 {
17370
+ column-count: 1 !important;
17371
+ }
17372
+ .columns-xl-2 {
17373
+ column-count: 2 !important;
17374
+ }
17375
+ .columns-xl-3 {
17376
+ column-count: 3 !important;
17377
+ }
17378
+ .columns-xl-4 {
17379
+ column-count: 4 !important;
17380
+ }
17381
+ }
17382
+ @media (min-width: 1400px) {
17383
+ .columns-xxl-1 {
17384
+ column-count: 1 !important;
17385
+ }
17386
+ .columns-xxl-2 {
17387
+ column-count: 2 !important;
17388
+ }
17389
+ .columns-xxl-3 {
17390
+ column-count: 3 !important;
17391
+ }
17392
+ .columns-xxl-4 {
17393
+ column-count: 4 !important;
17394
+ }
17395
+ }
16973
17396
  :where( .scroll-fade, .scroll-fade-y, .scroll-fade-x, .scroll-fade-t, .scroll-fade-b, .scroll-fade-l, .scroll-fade-r, .scroll-fade-s, .scroll-fade-e ) {
16974
17397
  --scroll-fade-size: min(12%, 2.5rem);
16975
17398
  --scroll-fade-reveal: 6rem;
@@ -17201,6 +17624,11 @@ label.btn {
17201
17624
  scroll-behavior: auto;
17202
17625
  }
17203
17626
  }
17627
+ @media (prefers-reduced-motion: no-preference) {
17628
+ .animate-breathe {
17629
+ animation: moo-breathe 2s ease-in-out infinite;
17630
+ }
17631
+ }
17204
17632
 
17205
17633
  /* Application layout */
17206
17634
  .sidebar {