@wpmoo/ui 0.1.1 → 0.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.
package/LICENSE CHANGED
@@ -2,6 +2,17 @@ MIT License
2
2
 
3
3
  Copyright (c) 2026 WPMoo (wpmoo.org)
4
4
 
5
+ This license applies to the source code in this repository, except where a
6
+ file, directory, or third-party notice states otherwise.
7
+
8
+ WPMoo-generated visual assets are not licensed under the MIT License unless
9
+ explicitly stated. This includes brand assets, component preview images,
10
+ marketing images, screenshots, generated artwork, and other WPMoo-owned image
11
+ assets under `static/images/`. See `ASSET_LICENSE.md`.
12
+
13
+ Vendored third-party material keeps its original license and attribution.
14
+ See `THIRD_PARTY_NOTICES.md`.
15
+
5
16
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
17
  of this software and associated documentation files (the "Software"), to deal
7
18
  in the Software without restriction, including without limitation the rights
package/README.md CHANGED
@@ -1,22 +1,35 @@
1
- # Moo UI
2
-
3
- **Bootstrap markup. shadcn feel.**
4
-
5
- Keep your Bootstrap 5.3 HTML and behavior. Replace the stylesheet and give
6
- your application a calmer, modern product interface without moving to React or
7
- Tailwind.
8
-
9
- [Explore the live catalog](https://ui.wpmoo.org/components/) ·
10
- [Try it in 30 seconds](#try-it-in-30-seconds) ·
11
- [View on npm](https://www.npmjs.com/package/@wpmoo/ui)
1
+ <p align="center">
2
+ <img src="https://ui.wpmoo.org/assets/images/readme-hero.webp" alt="Moo UI catalog preview" width="760">
3
+ </p>
4
+
5
+ <p align="center">
6
+ <a href="https://github.com/wpmoo-org/ui/actions/workflows/ui-ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/wpmoo-org/ui/ui-ci.yml?branch=main&label=CI"></a>
7
+ <a href="https://github.com/wpmoo-org/ui"><img alt="GitHub" src="https://img.shields.io/badge/GitHub-181717?logo=github&logoColor=white"></a>
8
+ <a href="https://www.npmjs.com/package/@wpmoo/ui"><img alt="npm" src="https://img.shields.io/npm/v/@wpmoo/ui?label=npm&logo=npm&color=cb3837"></a>
9
+ <a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg"></a>
10
+ </p>
11
+
12
+ <p align="center">
13
+ <strong>Bootstrap markup. shadcn feel.</strong>
14
+ </p>
15
+
16
+ <p align="center">
17
+ Keep your Bootstrap 5.3 HTML and behavior. Replace the stylesheet and give
18
+ your application a calmer, modern product interface without moving to React or
19
+ Tailwind.
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="https://ui.wpmoo.org/"><strong>Explore Moo UI »</strong></a>
24
+ </p>
25
+
26
+ <p align="center">
27
+ <a href="#try-it-in-30-seconds">Try it in 30 seconds</a> ·
28
+ <a href="https://www.npmjs.com/package/@wpmoo/ui">View on npm</a> ·
29
+ <a href="https://github.com/wpmoo-org/ui/issues">Report bug</a>
30
+ </p>
12
31
 
13
- ![Moo UI catalog preview](https://ui.wpmoo.org/assets/images/readme-hero.webp)
14
-
15
- [![CI](https://img.shields.io/github/actions/workflow/status/wpmoo-org/ui/ui-ci.yml?branch=main&label=CI&style=flat-square)](https://github.com/wpmoo-org/ui/actions/workflows/ui-ci.yml)
16
- [![coverage](https://img.shields.io/codecov/c/github/wpmoo-org/ui?branch=main&label=coverage&logo=codecov&style=flat-square&color=blue)](https://codecov.io/gh/wpmoo-org/ui)
17
- [![GitHub](https://img.shields.io/badge/GitHub-181717?logo=github&style=flat-square)](https://github.com/wpmoo-org/ui)
18
- [![npm](https://img.shields.io/npm/v/@wpmoo/ui?label=npm&logo=npm&style=flat-square&color=blue)](https://www.npmjs.com/package/@wpmoo/ui)
19
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](LICENSE)
32
+ # Moo UI
20
33
 
21
34
  Moo UI is for teams that already like Bootstrap's durability, documented
22
35
  components, and server-rendered friendliness, but want their customer portals,
@@ -33,7 +46,7 @@ Drop the stylesheet into ordinary Bootstrap markup:
33
46
 
34
47
  ```html
35
48
  <link rel="stylesheet"
36
- href="https://unpkg.com/@wpmoo/ui@0.1.1/dist/assets/css/moo-ui.css">
49
+ href="https://unpkg.com/@wpmoo/ui@0.2.0/dist/assets/css/moo-ui.css">
37
50
 
38
51
  <button type="button" class="btn btn-primary">Create workspace</button>
39
52
  ```
@@ -105,6 +118,56 @@ The live catalog is the source of truth for current coverage:
105
118
  Representative components include Button, Field, Table, Dialog, Toast, Sheet,
106
119
  and Sidebar. More components are being added as the catalog roadmap continues.
107
120
 
121
+ ## Designed, Not Just Restyled
122
+
123
+ Moo UI uses original sketch-style previews to show the thinking behind each
124
+ primitive: states, spacing, hierarchy, and the product UI feeling Bootstrap
125
+ projects often need. The README wraps a few of those transparent assets in
126
+ theme-aware surfaces so they stay legible on GitHub.
127
+
128
+ <p align="center">
129
+ <a href="https://ui.wpmoo.org/components/button.html">
130
+ <picture>
131
+ <source media="(prefers-color-scheme: dark)" srcset="static/images/readme/button-dark.svg">
132
+ <img src="static/images/readme/button-light.svg" alt="Button preview" width="31%">
133
+ </picture>
134
+ </a>
135
+ <a href="https://ui.wpmoo.org/components/dialog.html">
136
+ <picture>
137
+ <source media="(prefers-color-scheme: dark)" srcset="static/images/readme/dialog-dark.svg">
138
+ <img src="static/images/readme/dialog-light.svg" alt="Dialog preview" width="31%">
139
+ </picture>
140
+ </a>
141
+ <a href="https://ui.wpmoo.org/components/sidebar.html">
142
+ <picture>
143
+ <source media="(prefers-color-scheme: dark)" srcset="static/images/readme/sidebar-dark.svg">
144
+ <img src="static/images/readme/sidebar-light.svg" alt="Sidebar preview" width="31%">
145
+ </picture>
146
+ </a>
147
+ <a href="https://ui.wpmoo.org/components/toast.html">
148
+ <picture>
149
+ <source media="(prefers-color-scheme: dark)" srcset="static/images/readme/toast-dark.svg">
150
+ <img src="static/images/readme/toast-light.svg" alt="Toast preview" width="31%">
151
+ </picture>
152
+ </a>
153
+ <a href="https://ui.wpmoo.org/components/sheet.html">
154
+ <picture>
155
+ <source media="(prefers-color-scheme: dark)" srcset="static/images/readme/sheet-dark.svg">
156
+ <img src="static/images/readme/sheet-light.svg" alt="Sheet preview" width="31%">
157
+ </picture>
158
+ </a>
159
+ <a href="https://ui.wpmoo.org/components/input.html">
160
+ <picture>
161
+ <source media="(prefers-color-scheme: dark)" srcset="static/images/readme/input-dark.svg">
162
+ <img src="static/images/readme/input-light.svg" alt="Input preview" width="31%">
163
+ </picture>
164
+ </a>
165
+ </p>
166
+
167
+ <p align="center">
168
+ <a href="https://ui.wpmoo.org/components/">Browse the full catalog →</a>
169
+ </p>
170
+
108
171
  ## Package Boundaries
109
172
 
110
173
  The npm package distributes compiled CSS and license/notice files. It does not
@@ -430,6 +430,7 @@ caption {
430
430
  }
431
431
 
432
432
  th {
433
+ font-weight: 500;
433
434
  text-align: inherit;
434
435
  text-align: -webkit-match-parent;
435
436
  }
@@ -4932,7 +4933,7 @@ textarea.form-control-lg {
4932
4933
  float: left;
4933
4934
  padding-right: var(--bs-breadcrumb-item-padding-x);
4934
4935
  color: var(--bs-breadcrumb-divider-color);
4935
- content: var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */;
4936
+ content: var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, "<") */;
4936
4937
  }
4937
4938
 
4938
4939
  .breadcrumb-item.active {
@@ -12313,6 +12314,9 @@ textarea.form-control-lg {
12313
12314
  --moo-ring: #18181b;
12314
12315
  --moo-destructive: #dc2626;
12315
12316
  --moo-destructive-foreground: #fff;
12317
+ --moo-overlay-backdrop-opacity: 1;
12318
+ --moo-overlay-backdrop-bg: color-mix(in srgb, var(--bs-black) 10%, transparent);
12319
+ --moo-overlay-backdrop-filter: blur(8px);
12316
12320
  --moo-sidebar: #fafafa;
12317
12321
  --moo-sidebar-foreground: var(--moo-foreground);
12318
12322
  --moo-sidebar-accent: var(--moo-muted-surface);
@@ -12332,6 +12336,9 @@ textarea.form-control-lg {
12332
12336
  --moo-ring: #fafafa;
12333
12337
  --moo-destructive: #f87171;
12334
12338
  --moo-destructive-foreground: #18181b;
12339
+ --moo-overlay-backdrop-opacity: 1;
12340
+ --moo-overlay-backdrop-bg: color-mix(in srgb, var(--bs-black) 10%, transparent);
12341
+ --moo-overlay-backdrop-filter: blur(8px);
12335
12342
  --moo-sidebar: #1c1c1f;
12336
12343
  --moo-sidebar-foreground: var(--moo-foreground);
12337
12344
  --moo-sidebar-accent: var(--moo-muted-surface);
@@ -12348,6 +12355,12 @@ textarea.form-control-lg {
12348
12355
  box-shadow: none;
12349
12356
  }
12350
12357
 
12358
+ .btn-check:focus-visible + .btn {
12359
+ outline: var(--bs-focus-ring-width) solid var(--moo-ring);
12360
+ outline-offset: var(--bs-focus-ring-width);
12361
+ box-shadow: none;
12362
+ }
12363
+
12351
12364
  .input-group > .dropdown-toggle[aria-expanded="true"]:focus-visible {
12352
12365
  outline: 0;
12353
12366
  }
@@ -12846,6 +12859,8 @@ label.btn {
12846
12859
  --bs-btn-bg: transparent;
12847
12860
  --bs-btn-hover-bg: var(--moo-muted-surface);
12848
12861
  --bs-btn-hover-border-color: transparent;
12862
+ --bs-btn-active-bg: var(--bs-btn-hover-bg);
12863
+ --bs-btn-active-color: var(--bs-btn-color);
12849
12864
  --bs-btn-active-border-color: transparent;
12850
12865
  }
12851
12866
 
@@ -12895,6 +12910,12 @@ label.btn {
12895
12910
  border-bottom: 0;
12896
12911
  }
12897
12912
 
12913
+ .card-header,
12914
+ .card-body,
12915
+ .card-footer {
12916
+ padding-block: 0;
12917
+ }
12918
+
12898
12919
  .card-footer {
12899
12920
  display: flex;
12900
12921
  align-items: center;
@@ -12979,27 +13000,113 @@ label.btn {
12979
13000
  }
12980
13001
  }
12981
13002
 
13003
+ .menubar {
13004
+ gap: 0.125rem;
13005
+ padding: 0.1875rem;
13006
+ }
13007
+
13008
+ .menubar .dropdown-menu {
13009
+ z-index: 1000;
13010
+ }
13011
+
13012
+ .menubar [data-bs-toggle="dropdown"].show,
13013
+ .menubar .dropdown-toggle.show {
13014
+ --bs-btn-color: var(--moo-foreground);
13015
+ color: var(--bs-btn-color);
13016
+ font-weight: 500;
13017
+ }
13018
+
12982
13019
  .avatar {
13020
+ position: relative;
12983
13021
  display: inline-flex;
12984
13022
  align-items: center;
12985
13023
  justify-content: center;
12986
13024
  width: 2rem;
12987
13025
  height: 2rem;
12988
13026
  flex: 0 0 auto;
12989
- overflow: hidden;
12990
- border: var(--bs-border-width) solid var(--moo-border);
13027
+ overflow: visible;
13028
+ border: 0;
12991
13029
  border-radius: var(--bs-border-radius-pill);
12992
13030
  background-color: var(--moo-muted-surface);
12993
13031
  color: var(--moo-foreground);
12994
13032
  font-size: 0.875rem;
12995
13033
  font-weight: 500;
12996
13034
  line-height: 1;
13035
+ text-transform: uppercase;
13036
+ }
13037
+
13038
+ .avatar::after {
13039
+ content: "";
13040
+ position: absolute;
13041
+ inset: 0;
13042
+ z-index: 1;
13043
+ border: var(--bs-border-width) solid var(--moo-border);
13044
+ border-radius: var(--bs-border-radius-pill);
13045
+ pointer-events: none;
13046
+ opacity: 0.8;
12997
13047
  }
12998
13048
 
12999
13049
  .avatar > img {
13000
13050
  width: 100%;
13001
13051
  height: 100%;
13002
13052
  object-fit: cover;
13053
+ border-radius: var(--bs-border-radius-pill);
13054
+ }
13055
+
13056
+ .avatar-fallback {
13057
+ position: absolute;
13058
+ inset: 0;
13059
+ display: grid;
13060
+ place-items: center;
13061
+ text-align: center;
13062
+ padding: 0 0.15rem;
13063
+ }
13064
+
13065
+ .avatar--has-image > .avatar-fallback {
13066
+ display: none;
13067
+ }
13068
+
13069
+ .avatar-badge {
13070
+ position: absolute;
13071
+ inset-block-end: 0;
13072
+ inset-inline-end: 0;
13073
+ z-index: 2;
13074
+ display: inline-flex;
13075
+ align-items: center;
13076
+ justify-content: center;
13077
+ height: 0.9375rem;
13078
+ min-width: 0.9375rem;
13079
+ padding-inline: 0.2rem;
13080
+ border-radius: var(--bs-border-radius-pill);
13081
+ border: 2px solid var(--bs-body-bg);
13082
+ background-color: var(--moo-muted-surface);
13083
+ color: var(--moo-foreground);
13084
+ font-size: 0.625rem;
13085
+ font-weight: 500;
13086
+ line-height: 1;
13087
+ }
13088
+
13089
+ .avatar-badge [data-icon] {
13090
+ width: 0.625rem;
13091
+ height: 0.625rem;
13092
+ }
13093
+
13094
+ .avatar-badge--dot {
13095
+ height: 0.625rem;
13096
+ min-width: 0.625rem;
13097
+ padding-inline: 0;
13098
+ }
13099
+
13100
+ .avatar-badge--icon {
13101
+ width: 0.75rem;
13102
+ height: 0.75rem;
13103
+ min-width: 0.75rem;
13104
+ padding-inline: 0;
13105
+ }
13106
+
13107
+ .avatar-badge--icon [data-icon] {
13108
+ width: 0.375rem;
13109
+ height: 0.375rem;
13003
13110
  }
13004
13111
 
13005
13112
  .avatar-sm {
@@ -13014,6 +13121,38 @@ label.btn {
13014
13121
  font-size: 1rem;
13015
13122
  }
13016
13123
 
13124
+ .avatar-group {
13125
+ display: inline-flex;
13126
+ align-items: center;
13127
+ }
13128
+
13129
+ .avatar-group > .avatar {
13130
+ z-index: 0;
13131
+ }
13132
+
13133
+ .avatar-group .avatar + .avatar,
13134
+ .avatar-group .avatar + .avatar-count,
13135
+ .avatar-group .avatar-count + .avatar {
13136
+ margin-inline-start: -0.5rem;
13137
+ }
13138
+
13139
+ .avatar-count {
13140
+ display: inline-flex;
13141
+ align-items: center;
13142
+ justify-content: center;
13143
+ width: 2rem;
13144
+ height: 2rem;
13145
+ flex: 0 0 auto;
13146
+ border-radius: var(--bs-border-radius-pill);
13147
+ font-size: 0.75rem;
13148
+ font-weight: 500;
13149
+ }
13150
+
13151
+ .avatar-count::before {
13152
+ content: "+";
13153
+ margin-inline-end: -0.1rem;
13154
+ }
13155
+
13017
13156
  .nav {
13018
13157
  --bs-nav-link-color: var(--moo-foreground);
13019
13158
  --bs-nav-link-hover-color: var(--moo-foreground);
@@ -13047,7 +13186,13 @@ label.btn {
13047
13186
  }
13048
13187
 
13049
13188
  .skeleton {
13189
+ color: var(--moo-border);
13050
13190
  border-radius: var(--bs-border-radius);
13191
+ overflow: hidden;
13192
+ }
13193
+
13194
+ .skeleton > .placeholder {
13195
+ display: block;
13051
13196
  }
13052
13197
 
13053
13198
  .sidebar-wrapper {
@@ -13744,6 +13889,21 @@ label.btn {
13744
13889
  --bs-breadcrumb-item-active-color: var(--moo-foreground);
13745
13890
  }
13746
13891
 
13892
+ :dir(rtl) .breadcrumb {
13893
+ --bs-breadcrumb-divider: "<";
13894
+ }
13895
+
13896
+ :dir(rtl) .breadcrumb-item + .breadcrumb-item {
13897
+ padding-right: var(--bs-breadcrumb-item-padding-x);
13898
+ padding-left: 0;
13899
+ }
13900
+
13901
+ :dir(rtl) .breadcrumb-item + .breadcrumb-item::before {
13902
+ float: right;
13903
+ padding-right: 0;
13904
+ padding-left: var(--bs-breadcrumb-item-padding-x);
13905
+ }
13906
+
13747
13907
  .breadcrumb-item a {
13748
13908
  color: var(--moo-muted-foreground);
13749
13909
  text-decoration: none;
@@ -13755,6 +13915,35 @@ label.btn {
13755
13915
  text-decoration: none;
13756
13916
  }
13757
13917
 
13918
+ .breadcrumb-ellipsis {
13919
+ display: inline-flex;
13920
+ align-items: center;
13921
+ color: var(--moo-muted-foreground);
13922
+ }
13923
+
13924
+ .breadcrumb-ellipsis [data-icon] {
13925
+ width: 1rem;
13926
+ height: 1rem;
13927
+ }
13928
+
13929
+ .breadcrumb-dropdown-item {
13930
+ display: inline-flex;
13931
+ align-items: center;
13932
+ }
13933
+
13934
+ .breadcrumb-dropdown-item button {
13935
+ padding: 0;
13936
+ border: 0;
13937
+ background-color: transparent;
13938
+ color: var(--moo-muted-foreground);
13939
+ text-decoration: none;
13940
+ }
13941
+
13942
+ .breadcrumb-dropdown-item button:hover,
13943
+ .breadcrumb-dropdown-item button:focus {
13944
+ color: var(--moo-foreground);
13945
+ }
13946
+
13758
13947
  .page-link {
13759
13948
  display: inline-flex;
13760
13949
  align-items: center;
@@ -13798,21 +13987,41 @@ label.btn {
13798
13987
  }
13799
13988
 
13800
13989
  .accordion-button [data-icon] {
13990
+ position: absolute;
13991
+ inset-inline-end: var(--bs-accordion-btn-padding-x);
13992
+ top: 50%;
13801
13993
  width: 1rem;
13802
13994
  height: 1rem;
13803
- margin-inline-start: auto;
13804
13995
  flex-shrink: 0;
13996
+ pointer-events: none;
13997
+ transform: translateY(-50%);
13805
13998
  transition: transform 0.2s ease-in-out;
13999
+ transform-origin: center;
13806
14000
  }
13807
14001
 
13808
14002
  .accordion-button:not(.collapsed) [data-icon] {
13809
- transform: rotate(-180deg);
14003
+ transform: translateY(-50%) rotate(-180deg);
14004
+ }
14005
+
14006
+ .accordion-flush .accordion-button {
14007
+ text-align: start;
13810
14008
  }
13811
14009
 
13812
14010
  .accordion-button:hover {
13813
14011
  text-decoration: underline;
13814
14012
  }
13815
14013
 
14014
+ .accordion-flush {
14015
+ --bs-accordion-btn-padding-x: 0;
14016
+ --bs-accordion-btn-padding-y: 0.625rem;
14017
+ --bs-accordion-body-padding-x: 0;
14018
+ --bs-accordion-body-padding-y: 0.625rem;
14019
+ }
14020
+
14021
+ .accordion-flush .accordion-button {
14022
+ font-weight: 500;
14023
+ }
14024
+
13816
14025
  .tabs-list {
13817
14026
  display: inline-flex;
13818
14027
  gap: 0.125rem;
@@ -13848,35 +14057,74 @@ label.btn {
13848
14057
 
13849
14058
  .tab-content {
13850
14059
  display: grid;
14060
+ width: 100%;
14061
+ max-width: 100%;
14062
+ min-width: 0;
14063
+ margin-top: 0.75rem;
13851
14064
  }
13852
14065
 
13853
14066
  .tab-content > .tab-pane {
13854
14067
  grid-area: 1 / 1;
13855
14068
  display: block;
14069
+ width: 100%;
14070
+ max-width: 100%;
14071
+ min-width: 0;
14072
+ opacity: 0;
14073
+ transform: translateY(0.25rem);
13856
14074
  visibility: hidden;
14075
+ pointer-events: none;
14076
+ transition: opacity 0.16s ease, transform 0.16s ease, visibility 0s linear 0.16s;
13857
14077
  }
13858
14078
 
13859
14079
  .tab-content > .active {
14080
+ opacity: 1;
14081
+ transform: none;
13860
14082
  visibility: visible;
14083
+ pointer-events: auto;
14084
+ transition-delay: 0s;
14085
+ }
14086
+
14087
+ .collapsible {
14088
+ display: flex;
14089
+ flex-direction: column;
14090
+ gap: 0.5rem;
14091
+ width: 100%;
14092
+ max-width: 100%;
14093
+ min-width: 0;
13861
14094
  }
13862
14095
 
13863
14096
  .collapsible-header {
13864
14097
  display: flex;
13865
14098
  align-items: center;
13866
14099
  justify-content: space-between;
13867
- gap: 1rem;
14100
+ padding-inline: 0.5rem;
14101
+ gap: 0.5rem;
13868
14102
  }
13869
14103
 
13870
14104
  .collapsible-title {
13871
14105
  margin-bottom: 0;
13872
- font-size: 0.875rem;
13873
- font-weight: 600;
14106
+ font-size: 0.76562rem;
14107
+ font-weight: 500;
14108
+ color: var(--moo-foreground);
14109
+ }
14110
+
14111
+ .collapsible .btn[data-bs-toggle='collapse'] {
14112
+ color: var(--moo-muted-foreground);
14113
+ line-height: 1;
14114
+ }
14115
+
14116
+ .collapsible .btn[data-bs-toggle='collapse'] [data-icon] {
14117
+ width: 0.875rem;
14118
+ height: 0.875rem;
13874
14119
  }
13875
14120
 
13876
14121
  .collapsible-content {
13877
- padding-top: 0.5rem;
13878
- font-size: 0.875rem;
14122
+ padding: 0.5rem 0.75rem;
14123
+ border: var(--bs-border-width) solid var(--bs-border-color);
14124
+ border-radius: var(--bs-border-radius);
14125
+ font-size: 0.76562rem;
13879
14126
  color: var(--moo-muted-foreground);
14127
+ width: 100%;
13880
14128
  }
13881
14129
 
13882
14130
  .tooltip {
@@ -13951,15 +14199,36 @@ label.btn {
13951
14199
  font-weight: 500;
13952
14200
  }
13953
14201
 
13954
- .modal-footer {
13955
- padding: 1rem;
14202
+ .modal-header {
14203
+ gap: calc(var(--bs-modal-padding) * 0.75);
14204
+ }
14205
+
14206
+ .modal--alert {
14207
+ --bs-modal-width: 24rem;
14208
+ --bs-modal-padding: 1rem;
14209
+ }
14210
+
14211
+ .modal-header--alert {
14212
+ align-items: flex-start;
14213
+ padding: var(--bs-modal-padding);
14214
+ }
14215
+
14216
+ .modal-header__content {
14217
+ min-width: 0;
14218
+ }
14219
+
14220
+ .modal-description {
14221
+ margin-top: calc(var(--bs-modal-padding) * 0.375);
14222
+ margin-bottom: 0;
14223
+ color: var(--bs-secondary-color);
13956
14224
  }
13957
14225
 
13958
- body:has(.modal.show) > .modal-backdrop {
13959
- --bs-backdrop-opacity: 1;
13960
- background-color: color-mix(in srgb, var(--bs-black) 10%, transparent);
13961
- -webkit-backdrop-filter: blur(4px);
13962
- backdrop-filter: blur(4px);
14226
+ .modal--alert .modal-footer {
14227
+ padding: var(--bs-modal-padding);
14228
+ }
14229
+
14230
+ .modal-footer {
14231
+ padding: 1rem;
13963
14232
  }
13964
14233
 
13965
14234
  .offcanvas.sheet {
@@ -13978,23 +14247,6 @@ body:has(.modal.show) > .modal-backdrop {
13978
14247
  font-weight: 500;
13979
14248
  }
13980
14249
 
13981
- :has(> .offcanvas.sheet:is(.showing, .show, .hiding)) > .offcanvas-backdrop {
13982
- background-color: color-mix(in srgb, var(--bs-black) 10%, transparent);
13983
- transition: opacity 0.3s ease-in-out, -webkit-backdrop-filter 0.3s ease-in-out, backdrop-filter 0.3s ease-in-out;
13984
- }
13985
-
13986
- :has(> .offcanvas.sheet:is(.showing, .show)) > .offcanvas-backdrop {
13987
- opacity: 1;
13988
- -webkit-backdrop-filter: blur(4px);
13989
- backdrop-filter: blur(4px);
13990
- }
13991
-
13992
- :has(> .offcanvas.sheet.hiding) > .offcanvas-backdrop {
13993
- opacity: 0;
13994
- -webkit-backdrop-filter: blur(0);
13995
- backdrop-filter: blur(0);
13996
- }
13997
-
13998
14250
  .toast {
13999
14251
  --bs-toast-border-radius: var(--bs-border-radius-lg);
14000
14252
  --bs-toast-border-color: var(--moo-border);
@@ -14055,3 +14307,16 @@ body:has(.modal.show) > .modal-backdrop {
14055
14307
  .form-check-label {
14056
14308
  user-select: none;
14057
14309
  }
14310
+
14311
+ .modal-backdrop,
14312
+ .offcanvas-backdrop {
14313
+ --bs-backdrop-opacity: var(--moo-overlay-backdrop-opacity, 1);
14314
+ background-color: var(--moo-overlay-backdrop-bg, color-mix(in srgb, var(--bs-black) 10%, transparent));
14315
+ -webkit-backdrop-filter: var(--moo-overlay-backdrop-filter, blur(8px));
14316
+ backdrop-filter: var(--moo-overlay-backdrop-filter, blur(8px));
14317
+ }
14318
+
14319
+ .modal-backdrop.show,
14320
+ .offcanvas-backdrop.show {
14321
+ opacity: var(--moo-overlay-backdrop-opacity, 1);
14322
+ }