@wpmoo/ui 1.0.0-rc.1 → 1.0.0-rc.10

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 (99) hide show
  1. package/ASSET_LICENSE.md +4 -2
  2. package/LICENSE +28 -0
  3. package/README.md +105 -100
  4. package/certification.json +25 -3
  5. package/dist/assets/css/moo-ui.css +14005 -12457
  6. package/dist/assets/css/moo-ui.min.css +10 -28
  7. package/dist/assets/css/moo.css +2606 -902
  8. package/dist/assets/css/moo.min.css +10 -29
  9. package/dist/js/chart.js +15312 -0
  10. package/dist/js/chart.min.js +27 -0
  11. package/dist/js/combobox.js +129 -85
  12. package/dist/js/context-menu.js +35 -66
  13. package/dist/js/datatable.js +390 -188
  14. package/dist/js/datepicker.js +1197 -0
  15. package/dist/js/datepicker.min.js +7 -0
  16. package/dist/js/moo-ui.js +3947 -0
  17. package/dist/js/moo-ui.min.js +7 -0
  18. package/dist/js/sheet.js +46 -0
  19. package/dist/js/sidebar.js +190 -172
  20. package/dist/js/slider.js +289 -0
  21. package/dist/js/state.js +76 -0
  22. package/dist/release-manifest.json +24 -0
  23. package/package.json +39 -9
  24. package/scss/_components.scss +70 -0
  25. package/scss/_config.scss +18 -0
  26. package/scss/_settings.scss +5 -0
  27. package/scss/components/_accordion.scss +54 -0
  28. package/scss/components/_alert.scss +82 -0
  29. package/scss/components/_avatar.scss +139 -0
  30. package/scss/components/_badge.scss +34 -0
  31. package/scss/components/_breadcrumb.scss +119 -0
  32. package/scss/components/_button.scss +200 -0
  33. package/scss/components/_button_group.scss +57 -0
  34. package/scss/components/_card.scss +114 -0
  35. package/scss/components/_checkbox.scss +78 -0
  36. package/scss/components/_close_button.scss +56 -0
  37. package/scss/components/_collapsible.scss +44 -0
  38. package/scss/components/_combobox.scss +253 -0
  39. package/scss/components/_context-menu.scss +18 -0
  40. package/scss/components/_datatable.scss +1067 -0
  41. package/scss/components/_datepicker.scss +237 -0
  42. package/scss/components/_dialog.scss +69 -0
  43. package/scss/components/_dropdown.scss +201 -0
  44. package/scss/components/_field.scss +94 -0
  45. package/scss/components/_input.scss +31 -0
  46. package/scss/components/_input_group.scss +151 -0
  47. package/scss/components/_kbd.scss +11 -0
  48. package/scss/components/_menubar.scss +17 -0
  49. package/scss/components/_navigation.scss +36 -0
  50. package/scss/components/_pagination.scss +58 -0
  51. package/scss/components/_popover.scss +26 -0
  52. package/scss/components/_progress.scss +5 -0
  53. package/scss/components/_radio_group.scss +108 -0
  54. package/scss/components/_search_trigger.scss +61 -0
  55. package/scss/components/_select.scss +8 -0
  56. package/scss/components/_separator.scss +10 -0
  57. package/scss/components/_sheet.scss +16 -0
  58. package/scss/components/_sidebar.scss +5 -0
  59. package/scss/components/_skeleton.scss +10 -0
  60. package/scss/components/_slider.scss +213 -0
  61. package/scss/components/_spinner.scss +11 -0
  62. package/scss/components/_switch.scss +30 -0
  63. package/scss/components/_table.scss +12 -0
  64. package/scss/components/_tabs.scss +116 -0
  65. package/scss/components/_textarea.scss +8 -0
  66. package/scss/components/_toast.scss +116 -0
  67. package/scss/components/_toggle_group.scss +17 -0
  68. package/scss/components/_tooltip.scss +64 -0
  69. package/scss/components/sidebar/_base.scss +86 -0
  70. package/scss/components/sidebar/_collapsed.scss +112 -0
  71. package/scss/components/sidebar/_identity.scss +71 -0
  72. package/scss/components/sidebar/_menus.scss +219 -0
  73. package/scss/foundations/_backdrop.scss +102 -0
  74. package/scss/foundations/_focus.scss +83 -0
  75. package/scss/foundations/_globals.scss +5 -0
  76. package/scss/foundations/_scope.scss +26 -0
  77. package/scss/layouts/_app.scss +75 -0
  78. package/scss/layouts/_page_grid.scss +27 -0
  79. package/scss/layouts/app/sidebar/_base.scss +84 -0
  80. package/scss/layouts/app/sidebar/_default.scss +20 -0
  81. package/scss/layouts/app/sidebar/_floating.scss +36 -0
  82. package/scss/layouts/app/sidebar/_inset.scss +32 -0
  83. package/scss/mixins/_banner.scss +9 -0
  84. package/scss/moo-core.scss +16 -0
  85. package/scss/moo-ui.scss +54 -0
  86. package/scss/settings/_bootstrap_overrides.scss +7 -0
  87. package/scss/settings/_component_variables.scss +244 -0
  88. package/scss/settings/_forms.scss +28 -0
  89. package/scss/settings/_options.scss +2 -0
  90. package/scss/settings/_palette.scss +90 -0
  91. package/scss/themes/_forms.scss +15 -0
  92. package/scss/themes/_root.scss +20 -0
  93. package/scss/themes/_standalone.scss +3 -0
  94. package/scss/themes/_theme.scss +244 -0
  95. package/scss/utilities/_background_color.scss +18 -0
  96. package/scss/utilities/_scroll_fade.scss +193 -0
  97. package/scss/utilities/_scroll_fade_primitives.scss +43 -0
  98. package/scss/_facade-settings.scss +0 -51
  99. package/scss/settings/_facade_public.scss +0 -23
@@ -1,9 +1,14 @@
1
1
  /*!
2
- * Moo UI core
3
- * Copyright (c) 2026 WPMoo (wpmoo.org)
4
- * Includes Bootstrap 5.3.3 component output
5
- * SPDX-License-Identifier: MIT
2
+ * Moo UI v1.0.0-rc.10 (https://wpmoo.org/)
3
+ * Copyright 2026 WPMoo Authors
4
+ * Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
5
+ *
6
+ * Bootstrap v5.3.3 (https://getbootstrap.com/)
7
+ * Copyright 2011-2024 The Bootstrap Authors
8
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6
9
  */
10
+
11
+ /* Global styles */
7
12
  @property --moo-scroll-fade-t {
8
13
  syntax: "<length-percentage>";
9
14
  inherits: false;
@@ -70,7 +75,87 @@
70
75
  }
71
76
  }
72
77
 
73
- .moo-ui {
78
+ @keyframes moo-overlay-backdrop-enter {
79
+ from {
80
+ opacity: 0;
81
+ -webkit-backdrop-filter: blur(0);
82
+ backdrop-filter: blur(0);
83
+ }
84
+ to {
85
+ opacity: var(--moo-overlay-backdrop-opacity, 1);
86
+ -webkit-backdrop-filter: var(--moo-overlay-backdrop-filter, blur(6px));
87
+ backdrop-filter: var(--moo-overlay-backdrop-filter, blur(6px));
88
+ }
89
+ }
90
+
91
+ @keyframes moo-overlay-backdrop-exit {
92
+ from {
93
+ opacity: var(--moo-overlay-backdrop-opacity, 1);
94
+ -webkit-backdrop-filter: var(--moo-overlay-backdrop-filter, blur(6px));
95
+ backdrop-filter: var(--moo-overlay-backdrop-filter, blur(6px));
96
+ }
97
+ to {
98
+ opacity: 0;
99
+ -webkit-backdrop-filter: blur(0);
100
+ backdrop-filter: blur(0);
101
+ }
102
+ }
103
+
104
+ .modal-backdrop,
105
+ .offcanvas-backdrop {
106
+ --bs-backdrop-opacity: var(--moo-overlay-backdrop-opacity, 1);
107
+ opacity: 1;
108
+ color: transparent;
109
+ background-color: transparent;
110
+ }
111
+
112
+ .modal-backdrop.fade, .modal-backdrop.fade:not(.show),
113
+ .offcanvas-backdrop.fade,
114
+ .offcanvas-backdrop.fade:not(.show) {
115
+ opacity: 1;
116
+ }
117
+
118
+ .modal-backdrop.show,
119
+ .offcanvas-backdrop.show {
120
+ transition: none;
121
+ }
122
+
123
+ .modal-backdrop.fade:not(.show),
124
+ .offcanvas-backdrop.fade:not(.show) {
125
+ color: var(--bs-body-color, currentcolor);
126
+ transition: color var(--moo-overlay-motion-duration, 0.3s) ease-out;
127
+ }
128
+
129
+ .modal-backdrop::before,
130
+ .offcanvas-backdrop::before {
131
+ position: absolute;
132
+ inset: 0;
133
+ content: "";
134
+ opacity: 0;
135
+ background-color: var(--moo-overlay-backdrop-bg, color-mix(in srgb, #0a0a0a 10%, transparent));
136
+ -webkit-backdrop-filter: blur(0);
137
+ backdrop-filter: blur(0);
138
+ animation: moo-overlay-backdrop-exit var(--moo-overlay-motion-duration, 0.3s) ease-out both;
139
+ }
140
+
141
+ .modal-backdrop.show::before,
142
+ .offcanvas-backdrop.show::before {
143
+ animation: moo-overlay-backdrop-enter var(--moo-overlay-motion-duration, 0.3s) ease-out both;
144
+ }
145
+
146
+ @media (prefers-reduced-motion: reduce) {
147
+ .modal-backdrop,
148
+ .offcanvas-backdrop {
149
+ transition: none;
150
+ }
151
+ .modal-backdrop::before,
152
+ .offcanvas-backdrop::before {
153
+ animation: none;
154
+ }
155
+ }
156
+
157
+ /* Theme tokens */
158
+ .moo-ui[data-bs-theme] {
74
159
  --bs-blue: #0d6efd;
75
160
  --bs-indigo: #6610f2;
76
161
  --bs-purple: #6f42c1;
@@ -96,18 +181,18 @@
96
181
  --bs-gray-900: #212529;
97
182
  --bs-primary: #171717;
98
183
  --bs-secondary: #f4f4f5;
99
- --bs-success: #16803c;
100
- --bs-info: #0f6e8c;
101
- --bs-warning: #a15c00;
102
- --bs-danger: #dc2626;
184
+ --bs-success: #047857;
185
+ --bs-info: #0369a1;
186
+ --bs-warning: #b45309;
187
+ --bs-danger: #e7000b;
103
188
  --bs-light: #fafafa;
104
189
  --bs-dark: #18181b;
105
190
  --bs-primary-rgb: 23, 23, 23;
106
191
  --bs-secondary-rgb: 244, 244, 245;
107
- --bs-success-rgb: 22, 128, 60;
108
- --bs-info-rgb: 15, 110, 140;
109
- --bs-warning-rgb: 161, 92, 0;
110
- --bs-danger-rgb: 220, 38, 38;
192
+ --bs-success-rgb: 4, 120, 87;
193
+ --bs-info-rgb: 3, 105, 161;
194
+ --bs-warning-rgb: 180, 83, 9;
195
+ --bs-danger-rgb: 231, 0, 11;
111
196
  --bs-light-rgb: 250, 250, 250;
112
197
  --bs-dark-rgb: 24, 24, 27;
113
198
  --bs-white-rgb: 255, 255, 255;
@@ -136,147 +221,28 @@
136
221
  --bs-focus-ring-width: 2px;
137
222
  --bs-focus-ring-opacity: 0.25;
138
223
  --bs-focus-ring-color: var(--moo-ring);
224
+ --moo-overlay-motion-duration: 0.3s;
139
225
  --moo-overlay-backdrop-opacity: 1;
140
- --moo-overlay-backdrop-bg: color-mix(in srgb, var(--bs-black) 10%, transparent);
141
- --moo-overlay-backdrop-filter: blur(8px);
226
+ --moo-overlay-backdrop-bg: color-mix(in srgb, #0a0a0a 10%, transparent);
227
+ --moo-overlay-backdrop-filter: blur(6px);
142
228
  --moo-input-group-border-radius: var(--bs-border-radius-lg);
143
229
  --moo-disabled-control-opacity: 0.5;
144
230
  --moo-sidebar-foreground: var(--moo-foreground);
145
231
  --moo-sidebar-accent: var(--moo-muted-surface);
146
232
  --moo-sidebar-border: var(--moo-border);
147
- color-scheme: light;
148
- color: var(--bs-body-color);
149
- background-color: var(--bs-body-bg);
150
- --moo-surface: #fff;
151
- --moo-muted-surface: #f4f4f5;
152
- --moo-border: #e4e4e7;
153
- --moo-foreground: #18181b;
154
- --moo-muted-foreground: #71717a;
155
- --moo-disabled-foreground: #a1a1aa;
156
- --moo-ring: #18181b;
157
- --moo-destructive: #dc2626;
158
- --moo-destructive-foreground: #fff;
159
- --moo-sidebar: #fafafa;
160
- --bs-body-color: var(--moo-foreground);
161
- --bs-body-color-rgb: 24, 24, 27;
162
- --bs-body-bg: var(--moo-surface);
163
- --bs-body-bg-rgb: 255, 255, 255;
164
- --bs-emphasis-color: var(--moo-foreground);
165
- --bs-emphasis-color-rgb: 24, 24, 27;
166
- --bs-secondary-color: var(--moo-muted-foreground);
167
- --bs-secondary-color-rgb: 113, 113, 122;
168
- --bs-secondary-bg: var(--moo-muted-surface);
169
- --bs-secondary-bg-rgb: 244, 244, 245;
170
- --bs-tertiary-color: #a1a1aa;
171
- --bs-tertiary-color-rgb: 161, 161, 170;
172
- --bs-tertiary-bg: #fafafa;
173
- --bs-tertiary-bg-rgb: 250, 250, 250;
174
- --bs-heading-color: var(--moo-foreground);
175
- --bs-link-color: var(--moo-foreground);
176
- --bs-link-color-rgb: 24, 24, 27;
177
- --bs-link-hover-color: var(--moo-muted-foreground);
178
- --bs-link-hover-color-rgb: 113, 113, 122;
179
- --bs-code-color: #d63384;
180
- --bs-highlight-color: var(--moo-foreground);
181
- --bs-highlight-bg: #fff3cd;
182
- --bs-border-color: var(--moo-border);
183
- --bs-border-color-translucent: rgba(24, 24, 27, 0.175);
184
- --bs-form-valid-color: #16803c;
185
- --bs-form-valid-border-color: #16803c;
186
- --bs-form-invalid-color: #dc2626;
187
- --bs-form-invalid-border-color: #dc2626;
188
- --bs-primary-text-emphasis: #090909;
189
- --bs-secondary-text-emphasis: #626262;
190
- --bs-success-text-emphasis: #093318;
191
- --bs-info-text-emphasis: #062c38;
192
- --bs-warning-text-emphasis: #402500;
193
- --bs-danger-text-emphasis: #580f0f;
194
- --bs-light-text-emphasis: #495057;
195
- --bs-dark-text-emphasis: #495057;
196
- --bs-primary-bg-subtle: #d1d1d1;
197
- --bs-secondary-bg-subtle: #fdfdfd;
198
- --bs-success-bg-subtle: #d0e6d8;
199
- --bs-info-bg-subtle: #cfe2e8;
200
- --bs-warning-bg-subtle: #ecdecc;
201
- --bs-danger-bg-subtle: #f8d4d4;
202
- --bs-light-bg-subtle: #fcfcfd;
203
- --bs-dark-bg-subtle: #ced4da;
204
- --bs-primary-border-subtle: #a2a2a2;
205
- --bs-secondary-border-subtle: #fbfbfb;
206
- --bs-success-border-subtle: #a2ccb1;
207
- --bs-info-border-subtle: #9fc5d1;
208
- --bs-warning-border-subtle: #d9be99;
209
- --bs-danger-border-subtle: #f1a8a8;
210
- --bs-light-border-subtle: #e9ecef;
211
- --bs-dark-border-subtle: #adb5bd;
212
- }
213
-
214
- :where(html, body)[data-bs-theme="dark"] .moo-ui:not([data-bs-theme]) {
215
- color-scheme: dark;
216
- color: var(--bs-body-color);
217
- background-color: var(--bs-body-bg);
218
- --moo-surface: #18181b;
219
- --moo-muted-surface: #27272a;
220
- --moo-border: #3f3f46;
221
- --moo-foreground: #fafafa;
222
- --moo-muted-foreground: #a1a1aa;
223
- --moo-disabled-foreground: #71717a;
224
- --moo-ring: #fafafa;
225
- --moo-destructive: #f87171;
226
- --moo-destructive-foreground: #18181b;
227
- --moo-sidebar: #1c1c1f;
228
- --bs-body-color: var(--moo-foreground);
229
- --bs-body-color-rgb: 250, 250, 250;
230
- --bs-body-bg: var(--moo-surface);
231
- --bs-body-bg-rgb: 24, 24, 27;
232
- --bs-emphasis-color: var(--moo-foreground);
233
- --bs-emphasis-color-rgb: 250, 250, 250;
234
- --bs-secondary-color: var(--moo-muted-foreground);
235
- --bs-secondary-color-rgb: 161, 161, 170;
236
- --bs-secondary-bg: var(--moo-muted-surface);
237
- --bs-secondary-bg-rgb: 39, 39, 42;
238
- --bs-tertiary-color: #71717a;
239
- --bs-tertiary-color-rgb: 113, 113, 122;
240
- --bs-tertiary-bg: #202024;
241
- --bs-tertiary-bg-rgb: 32, 32, 36;
242
- --bs-heading-color: var(--moo-foreground);
243
- --bs-link-color: var(--moo-foreground);
244
- --bs-link-color-rgb: 250, 250, 250;
245
- --bs-link-hover-color: var(--moo-muted-foreground);
246
- --bs-link-hover-color-rgb: 161, 161, 170;
247
- --bs-code-color: #e685b5;
248
- --bs-highlight-color: var(--moo-foreground);
249
- --bs-highlight-bg: #664d03;
250
- --bs-border-color: var(--moo-border);
251
- --bs-border-color-translucent: rgba(250, 250, 250, 0.15);
252
- --bs-form-valid-color: #75b798;
253
- --bs-form-valid-border-color: #75b798;
254
- --bs-form-invalid-color: #ea868f;
255
- --bs-form-invalid-border-color: #ea868f;
256
- --bs-primary-text-emphasis: #747474;
257
- --bs-secondary-text-emphasis: #f8f8f9;
258
- --bs-success-text-emphasis: #73b38a;
259
- --bs-info-text-emphasis: #6fa8ba;
260
- --bs-warning-text-emphasis: #c79d66;
261
- --bs-danger-text-emphasis: #ea7d7d;
262
- --bs-light-text-emphasis: #f8f9fa;
263
- --bs-dark-text-emphasis: #dee2e6;
264
- --bs-primary-bg-subtle: #050505;
265
- --bs-secondary-bg-subtle: #313131;
266
- --bs-success-bg-subtle: #041a0c;
267
- --bs-info-bg-subtle: #03161c;
268
- --bs-warning-bg-subtle: #201200;
269
- --bs-danger-bg-subtle: #2c0808;
270
- --bs-light-bg-subtle: #343a40;
271
- --bs-dark-bg-subtle: #1f2225;
272
- --bs-primary-border-subtle: #0e0e0e;
273
- --bs-secondary-border-subtle: #929293;
274
- --bs-success-border-subtle: #0d4d24;
275
- --bs-info-border-subtle: #094254;
276
- --bs-warning-border-subtle: #613700;
277
- --bs-danger-border-subtle: #841717;
278
- --bs-light-border-subtle: #495057;
279
- --bs-dark-border-subtle: #343a40;
233
+ --moo-chart-1: #52525b;
234
+ --moo-chart-2: #71717a;
235
+ --moo-chart-3: #a1a1aa;
236
+ --moo-chart-4: #3f3f46;
237
+ --moo-chart-5: #27272a;
238
+ --moo-heading-font-family: var(--bs-body-font-family);
239
+ --moo-small-font-size: 0.75rem;
240
+ --moo-paragraph-margin-top: 0;
241
+ --moo-paragraph-margin-bottom: 1rem;
242
+ font-family: var(--bs-body-font-family);
243
+ font-size: var(--bs-body-font-size);
244
+ font-weight: var(--bs-body-font-weight);
245
+ line-height: var(--bs-body-line-height);
280
246
  }
281
247
 
282
248
  .moo-ui[data-bs-theme="light"] {
@@ -286,12 +252,29 @@
286
252
  --moo-surface: #fff;
287
253
  --moo-muted-surface: #f4f4f5;
288
254
  --moo-border: #e4e4e7;
255
+ --moo-primary: #171717;
256
+ --moo-primary-foreground: #fafafa;
289
257
  --moo-foreground: #18181b;
290
258
  --moo-muted-foreground: #71717a;
291
259
  --moo-disabled-foreground: #a1a1aa;
292
- --moo-ring: #18181b;
293
- --moo-destructive: #dc2626;
294
- --moo-destructive-foreground: #fff;
260
+ --moo-ring: color-mix(in srgb, #fff 60%, #171717);
261
+ --moo-destructive: #e7000b;
262
+ --moo-destructive-surface: color-mix(in srgb, #e7000b 3%, transparent);
263
+ --moo-destructive-surface-hover: color-mix(in srgb, #e7000b 6%, transparent);
264
+ --moo-destructive-foreground: #e7000b;
265
+ --moo-form-invalid-ring-color: color-mix(in srgb, #e7000b 20%, transparent);
266
+ --moo-warning: #b45309;
267
+ --moo-warning-surface: color-mix(in srgb, #b45309 10%, transparent);
268
+ --moo-warning-surface-hover: color-mix(in srgb, #b45309 20%, transparent);
269
+ --moo-warning-foreground: #b45309;
270
+ --moo-success: #047857;
271
+ --moo-success-surface: color-mix(in srgb, #047857 10%, transparent);
272
+ --moo-success-surface-hover: color-mix(in srgb, #047857 20%, transparent);
273
+ --moo-success-foreground: #047857;
274
+ --moo-info: #0369a1;
275
+ --moo-info-surface: color-mix(in srgb, #0369a1 10%, transparent);
276
+ --moo-info-surface-hover: color-mix(in srgb, #0369a1 20%, transparent);
277
+ --moo-info-foreground: #0369a1;
295
278
  --moo-sidebar: #fafafa;
296
279
  --bs-body-color: var(--moo-foreground);
297
280
  --bs-body-color-rgb: 24, 24, 27;
@@ -317,32 +300,32 @@
317
300
  --bs-highlight-bg: #fff3cd;
318
301
  --bs-border-color: var(--moo-border);
319
302
  --bs-border-color-translucent: rgba(24, 24, 27, 0.175);
320
- --bs-form-valid-color: #16803c;
321
- --bs-form-valid-border-color: #16803c;
322
- --bs-form-invalid-color: #dc2626;
323
- --bs-form-invalid-border-color: #dc2626;
303
+ --bs-form-valid-color: #047857;
304
+ --bs-form-valid-border-color: #047857;
305
+ --bs-form-invalid-color: var(--moo-destructive);
306
+ --bs-form-invalid-border-color: #e7000b;
324
307
  --bs-primary-text-emphasis: #090909;
325
308
  --bs-secondary-text-emphasis: #626262;
326
- --bs-success-text-emphasis: #093318;
327
- --bs-info-text-emphasis: #062c38;
328
- --bs-warning-text-emphasis: #402500;
329
- --bs-danger-text-emphasis: #580f0f;
309
+ --bs-success-text-emphasis: #023023;
310
+ --bs-info-text-emphasis: #012a40;
311
+ --bs-warning-text-emphasis: #482104;
312
+ --bs-danger-text-emphasis: #5c0004;
330
313
  --bs-light-text-emphasis: #495057;
331
314
  --bs-dark-text-emphasis: #495057;
332
315
  --bs-primary-bg-subtle: #d1d1d1;
333
316
  --bs-secondary-bg-subtle: #fdfdfd;
334
- --bs-success-bg-subtle: #d0e6d8;
335
- --bs-info-bg-subtle: #cfe2e8;
336
- --bs-warning-bg-subtle: #ecdecc;
337
- --bs-danger-bg-subtle: #f8d4d4;
317
+ --bs-success-bg-subtle: #cde4dd;
318
+ --bs-info-bg-subtle: #cde1ec;
319
+ --bs-warning-bg-subtle: #f0ddce;
320
+ --bs-danger-bg-subtle: #faccce;
338
321
  --bs-light-bg-subtle: #fcfcfd;
339
322
  --bs-dark-bg-subtle: #ced4da;
340
323
  --bs-primary-border-subtle: #a2a2a2;
341
324
  --bs-secondary-border-subtle: #fbfbfb;
342
- --bs-success-border-subtle: #a2ccb1;
343
- --bs-info-border-subtle: #9fc5d1;
344
- --bs-warning-border-subtle: #d9be99;
345
- --bs-danger-border-subtle: #f1a8a8;
325
+ --bs-success-border-subtle: #9bc9bc;
326
+ --bs-info-border-subtle: #9ac3d9;
327
+ --bs-warning-border-subtle: #e1ba9d;
328
+ --bs-danger-border-subtle: #f5999d;
346
329
  --bs-light-border-subtle: #e9ecef;
347
330
  --bs-dark-border-subtle: #adb5bd;
348
331
  }
@@ -351,20 +334,37 @@
351
334
  color-scheme: dark;
352
335
  color: var(--bs-body-color);
353
336
  background-color: var(--bs-body-bg);
354
- --moo-surface: #18181b;
337
+ --moo-surface: #0a0a0a;
355
338
  --moo-muted-surface: #27272a;
356
339
  --moo-border: #3f3f46;
340
+ --moo-primary: #e4e4e7;
341
+ --moo-primary-foreground: #18181b;
357
342
  --moo-foreground: #fafafa;
358
343
  --moo-muted-foreground: #a1a1aa;
359
344
  --moo-disabled-foreground: #71717a;
360
- --moo-ring: #fafafa;
361
- --moo-destructive: #f87171;
362
- --moo-destructive-foreground: #18181b;
345
+ --moo-ring: color-mix(in srgb, #fff 40%, #171717);
346
+ --moo-destructive: #ff6467;
347
+ --moo-destructive-surface: color-mix(in srgb, #ff6467 20%, transparent);
348
+ --moo-destructive-surface-hover: color-mix(in srgb, #ff6467 30%, transparent);
349
+ --moo-destructive-foreground: #ff6467;
350
+ --moo-form-invalid-ring-color: color-mix(in srgb, #ff6467 40%, transparent);
351
+ --moo-warning: color-mix(in srgb, #fafafa 60%, #b45309);
352
+ --moo-warning-surface: color-mix(in srgb, color-mix(in srgb, #fafafa 60%, #b45309) 20%, transparent);
353
+ --moo-warning-surface-hover: color-mix(in srgb, color-mix(in srgb, #fafafa 60%, #b45309) 30%, transparent);
354
+ --moo-warning-foreground: color-mix(in srgb, #fafafa 60%, #b45309);
355
+ --moo-success: color-mix(in srgb, #fafafa 60%, #047857);
356
+ --moo-success-surface: color-mix(in srgb, color-mix(in srgb, #fafafa 60%, #047857) 20%, transparent);
357
+ --moo-success-surface-hover: color-mix(in srgb, color-mix(in srgb, #fafafa 60%, #047857) 30%, transparent);
358
+ --moo-success-foreground: color-mix(in srgb, #fafafa 60%, #047857);
359
+ --moo-info: color-mix(in srgb, #fafafa 60%, #0369a1);
360
+ --moo-info-surface: color-mix(in srgb, color-mix(in srgb, #fafafa 60%, #0369a1) 20%, transparent);
361
+ --moo-info-surface-hover: color-mix(in srgb, color-mix(in srgb, #fafafa 60%, #0369a1) 30%, transparent);
362
+ --moo-info-foreground: color-mix(in srgb, #fafafa 60%, #0369a1);
363
363
  --moo-sidebar: #1c1c1f;
364
364
  --bs-body-color: var(--moo-foreground);
365
365
  --bs-body-color-rgb: 250, 250, 250;
366
366
  --bs-body-bg: var(--moo-surface);
367
- --bs-body-bg-rgb: 24, 24, 27;
367
+ --bs-body-bg-rgb: 10, 10, 10;
368
368
  --bs-emphasis-color: var(--moo-foreground);
369
369
  --bs-emphasis-color-rgb: 250, 250, 250;
370
370
  --bs-secondary-color: var(--moo-muted-foreground);
@@ -387,39 +387,41 @@
387
387
  --bs-border-color-translucent: rgba(250, 250, 250, 0.15);
388
388
  --bs-form-valid-color: #75b798;
389
389
  --bs-form-valid-border-color: #75b798;
390
- --bs-form-invalid-color: #ea868f;
391
- --bs-form-invalid-border-color: #ea868f;
390
+ --bs-form-invalid-color: var(--moo-destructive);
391
+ --bs-form-invalid-border-color: color-mix(in srgb, #ff6467 50%, transparent);
392
392
  --bs-primary-text-emphasis: #747474;
393
393
  --bs-secondary-text-emphasis: #f8f8f9;
394
- --bs-success-text-emphasis: #73b38a;
395
- --bs-info-text-emphasis: #6fa8ba;
396
- --bs-warning-text-emphasis: #c79d66;
397
- --bs-danger-text-emphasis: #ea7d7d;
394
+ --bs-success-text-emphasis: #68ae9a;
395
+ --bs-info-text-emphasis: #68a5c7;
396
+ --bs-warning-text-emphasis: #d2986b;
397
+ --bs-danger-text-emphasis: #f1666d;
398
398
  --bs-light-text-emphasis: #f8f9fa;
399
399
  --bs-dark-text-emphasis: #dee2e6;
400
400
  --bs-primary-bg-subtle: #050505;
401
401
  --bs-secondary-bg-subtle: #313131;
402
- --bs-success-bg-subtle: #041a0c;
403
- --bs-info-bg-subtle: #03161c;
404
- --bs-warning-bg-subtle: #201200;
405
- --bs-danger-bg-subtle: #2c0808;
402
+ --bs-success-bg-subtle: #011811;
403
+ --bs-info-bg-subtle: #011520;
404
+ --bs-warning-bg-subtle: #241102;
405
+ --bs-danger-bg-subtle: #2e0002;
406
406
  --bs-light-bg-subtle: #343a40;
407
407
  --bs-dark-bg-subtle: #1f2225;
408
408
  --bs-primary-border-subtle: #0e0e0e;
409
409
  --bs-secondary-border-subtle: #929293;
410
- --bs-success-border-subtle: #0d4d24;
411
- --bs-info-border-subtle: #094254;
412
- --bs-warning-border-subtle: #613700;
413
- --bs-danger-border-subtle: #841717;
410
+ --bs-success-border-subtle: #024834;
411
+ --bs-info-border-subtle: #023f61;
412
+ --bs-warning-border-subtle: #6c3205;
413
+ --bs-danger-border-subtle: #8b0007;
414
414
  --bs-light-border-subtle: #495057;
415
415
  --bs-dark-border-subtle: #343a40;
416
416
  }
417
417
 
418
- .moo-ui[dir="rtl"] {
418
+ .moo-ui[data-bs-theme][dir="rtl"] {
419
419
  direction: rtl;
420
420
  }
421
421
 
422
- @scope (.moo-ui) {
422
+ @scope (.moo-ui) to (:where(.moo-ui[data-bs-theme="light"], .moo-ui[data-bs-theme="dark"])) {
423
+
424
+ /* Bootstrap Components */
423
425
  .table {
424
426
  --bs-table-color-type: initial;
425
427
  --bs-table-bg-type: initial;
@@ -518,52 +520,52 @@
518
520
  }
519
521
  .table-success {
520
522
  --bs-table-color: #0a0a0a;
521
- --bs-table-bg: #d0e6d8;
522
- --bs-table-border-color: #a8baaf;
523
- --bs-table-striped-bg: #c6dbce;
523
+ --bs-table-bg: #cde4dd;
524
+ --bs-table-border-color: #a6b8b3;
525
+ --bs-table-striped-bg: #c3d9d2;
524
526
  --bs-table-striped-color: #0a0a0a;
525
- --bs-table-active-bg: #bcd0c3;
527
+ --bs-table-active-bg: #bacec8;
526
528
  --bs-table-active-color: #0a0a0a;
527
- --bs-table-hover-bg: #c1d6c9;
529
+ --bs-table-hover-bg: #bed4cd;
528
530
  --bs-table-hover-color: #0a0a0a;
529
531
  color: var(--bs-table-color);
530
532
  border-color: var(--bs-table-border-color);
531
533
  }
532
534
  .table-info {
533
535
  --bs-table-color: #0a0a0a;
534
- --bs-table-bg: #cfe2e8;
535
- --bs-table-border-color: #a8b7bc;
536
- --bs-table-striped-bg: #c5d7dd;
536
+ --bs-table-bg: #cde1ec;
537
+ --bs-table-border-color: #a6b6bf;
538
+ --bs-table-striped-bg: #c3d6e1;
537
539
  --bs-table-striped-color: #0a0a0a;
538
- --bs-table-active-bg: #bbccd2;
540
+ --bs-table-active-bg: #baccd5;
539
541
  --bs-table-active-color: #0a0a0a;
540
- --bs-table-hover-bg: #c0d2d7;
542
+ --bs-table-hover-bg: #bed1db;
541
543
  --bs-table-hover-color: #0a0a0a;
542
544
  color: var(--bs-table-color);
543
545
  border-color: var(--bs-table-border-color);
544
546
  }
545
547
  .table-warning {
546
548
  --bs-table-color: #0a0a0a;
547
- --bs-table-bg: #ecdecc;
548
- --bs-table-border-color: #bfb4a5;
549
- --bs-table-striped-bg: #e1d3c2;
549
+ --bs-table-bg: #f0ddce;
550
+ --bs-table-border-color: #c2b3a7;
551
+ --bs-table-striped-bg: #e5d2c4;
550
552
  --bs-table-striped-color: #0a0a0a;
551
- --bs-table-active-bg: #d5c9b9;
553
+ --bs-table-active-bg: #d9c8ba;
552
554
  --bs-table-active-color: #0a0a0a;
553
- --bs-table-hover-bg: #dbcebd;
555
+ --bs-table-hover-bg: #dfcdbf;
554
556
  --bs-table-hover-color: #0a0a0a;
555
557
  color: var(--bs-table-color);
556
558
  border-color: var(--bs-table-border-color);
557
559
  }
558
560
  .table-danger {
559
561
  --bs-table-color: #0a0a0a;
560
- --bs-table-bg: #f8d4d4;
561
- --bs-table-border-color: #c8acac;
562
- --bs-table-striped-bg: #eccaca;
562
+ --bs-table-bg: #faccce;
563
+ --bs-table-border-color: #caa5a7;
564
+ --bs-table-striped-bg: #eec2c4;
563
565
  --bs-table-striped-color: #0a0a0a;
564
- --bs-table-active-bg: #e0c0c0;
566
+ --bs-table-active-bg: #e2b9ba;
565
567
  --bs-table-active-color: #0a0a0a;
566
- --bs-table-hover-bg: #e6c5c5;
568
+ --bs-table-hover-bg: #e8bdbf;
567
569
  --bs-table-hover-color: #0a0a0a;
568
570
  color: var(--bs-table-color);
569
571
  border-color: var(--bs-table-border-color);
@@ -667,10 +669,10 @@
667
669
  line-height: 1.42857;
668
670
  color: var(--bs-body-color);
669
671
  appearance: none;
670
- background-color: transparent;
672
+ background-color: var(--moo-input-bg, transparent);
671
673
  background-clip: padding-box;
672
674
  border: var(--bs-border-width) solid var(--moo-border);
673
- border-radius: 0.625rem;
675
+ border-radius: var(--bs-border-radius-lg);
674
676
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
675
677
  }
676
678
  @media (prefers-reduced-motion: reduce) {
@@ -686,7 +688,7 @@
686
688
  }
687
689
  .form-control:focus {
688
690
  color: var(--bs-body-color);
689
- background-color: transparent;
691
+ background-color: var(--moo-input-bg, transparent);
690
692
  border-color: #8b8b8b;
691
693
  outline: 0;
692
694
  box-shadow: 0 0 0 2px rgba(23, 23, 23, 0.25);
@@ -795,11 +797,11 @@
795
797
  }
796
798
  .form-control-color::-moz-color-swatch {
797
799
  border: 0 !important;
798
- border-radius: 0.625rem;
800
+ border-radius: var(--bs-border-radius-lg);
799
801
  }
800
802
  .form-control-color::-webkit-color-swatch {
801
803
  border: 0 !important;
802
- border-radius: 0.625rem;
804
+ border-radius: var(--bs-border-radius-lg);
803
805
  }
804
806
  .form-control-color.form-control-sm {
805
807
  height: calc(1.42857em + 0.5rem + calc(var(--bs-border-width) * 2));
@@ -817,13 +819,13 @@
817
819
  line-height: 1.42857;
818
820
  color: var(--bs-body-color);
819
821
  appearance: none;
820
- background-color: transparent;
822
+ background-color: var(--moo-input-bg, transparent);
821
823
  background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);
822
824
  background-repeat: no-repeat;
823
825
  background-position: right 0.625rem center;
824
826
  background-size: 16px 12px;
825
827
  border: var(--bs-border-width) solid var(--moo-border);
826
- border-radius: 0.625rem;
828
+ border-radius: var(--bs-border-radius-lg);
827
829
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
828
830
  }
829
831
  @media (prefers-reduced-motion: reduce) {
@@ -870,29 +872,29 @@
870
872
  .form-check {
871
873
  display: block;
872
874
  min-height: 1.3125rem;
873
- padding-left: 1.5em;
875
+ padding-left: 1.5rem;
874
876
  margin-bottom: 0.125rem;
875
877
  }
876
878
  .form-check .form-check-input {
877
879
  float: left;
878
- margin-left: -1.5em;
880
+ margin-left: -1.5rem;
879
881
  }
880
882
  .form-check-reverse {
881
- padding-right: 1.5em;
883
+ padding-right: 1.5rem;
882
884
  padding-left: 0;
883
885
  text-align: right;
884
886
  }
885
887
  .form-check-reverse .form-check-input {
886
888
  float: right;
887
- margin-right: -1.5em;
889
+ margin-right: -1.5rem;
888
890
  margin-left: 0;
889
891
  }
890
892
  .form-check-input {
891
- --bs-form-check-bg: transparent;
893
+ --bs-form-check-bg: var(--moo-input-bg, transparent);
892
894
  flex-shrink: 0;
893
- width: 1em;
894
- height: 1em;
895
- margin-top: 0.25em;
895
+ width: 1rem;
896
+ height: 1rem;
897
+ margin-top: 0.25rem;
896
898
  vertical-align: top;
897
899
  appearance: none;
898
900
  background-color: var(--bs-form-check-bg);
@@ -918,8 +920,8 @@
918
920
  box-shadow: 0 0 0 var(--bs-focus-ring-width) color-mix(in srgb, var(--moo-ring) 50%, transparent);
919
921
  }
920
922
  .form-check-input:checked {
921
- background-color: #171717;
922
- border-color: #171717;
923
+ background-color: var(--moo-primary);
924
+ border-color: var(--moo-primary);
923
925
  }
924
926
  .form-check-input:checked[type="checkbox"] {
925
927
  --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
@@ -928,8 +930,8 @@
928
930
  --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
929
931
  }
930
932
  .form-check-input[type="checkbox"]:indeterminate {
931
- background-color: #171717;
932
- border-color: #171717;
933
+ background-color: var(--moo-primary);
934
+ border-color: var(--moo-primary);
933
935
  --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
934
936
  }
935
937
  .form-check-input:disabled {
@@ -1024,9 +1026,9 @@
1024
1026
  color: var(--bs-body-color);
1025
1027
  text-align: center;
1026
1028
  white-space: nowrap;
1027
- background-color: var(--bs-tertiary-bg);
1029
+ background-color: var(--moo-input-bg, transparent);
1028
1030
  border: var(--bs-border-width) solid var(--moo-border);
1029
- border-radius: 0.625rem;
1031
+ border-radius: var(--bs-border-radius-lg);
1030
1032
  }
1031
1033
  .input-group-lg > .form-control,
1032
1034
  .input-group-lg > .form-select,
@@ -1113,36 +1115,18 @@
1113
1115
  }
1114
1116
  .was-validated .form-control:valid, .form-control.is-valid {
1115
1117
  border-color: var(--bs-form-valid-border-color);
1116
- padding-right: calc(1.42857em + 0.5rem);
1117
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2316803c' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
1118
- background-repeat: no-repeat;
1119
- background-position: right calc(0.35714em + 0.125rem) center;
1120
- background-size: calc(0.71429em + 0.25rem) calc(0.71429em + 0.25rem);
1121
1118
  }
1122
1119
  .was-validated .form-control:valid:focus, .form-control.is-valid:focus {
1123
1120
  border-color: var(--bs-form-valid-border-color);
1124
1121
  box-shadow: 0 0 0 2px rgba(var(--bs-success-rgb), 0.25);
1125
1122
  }
1126
- .was-validated textarea.form-control:valid, textarea.form-control.is-valid {
1127
- padding-right: calc(1.42857em + 0.5rem);
1128
- background-position: top calc(0.35714em + 0.125rem) right calc(0.35714em + 0.125rem);
1129
- }
1130
1123
  .was-validated .form-select:valid, .form-select.is-valid {
1131
1124
  border-color: var(--bs-form-valid-border-color);
1132
1125
  }
1133
- .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
1134
- --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2316803c' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
1135
- padding-right: 3.4375rem;
1136
- background-position: right 0.625rem center, center right 1.875rem;
1137
- background-size: 16px 12px, calc(0.71429em + 0.25rem) calc(0.71429em + 0.25rem);
1138
- }
1139
1126
  .was-validated .form-select:valid:focus, .form-select.is-valid:focus {
1140
1127
  border-color: var(--bs-form-valid-border-color);
1141
1128
  box-shadow: 0 0 0 2px rgba(var(--bs-success-rgb), 0.25);
1142
1129
  }
1143
- .was-validated .form-control-color:valid, .form-control-color.is-valid {
1144
- width: calc(3rem + calc(1.42857em + 0.5rem));
1145
- }
1146
1130
  .was-validated .form-check-input:valid, .form-check-input.is-valid {
1147
1131
  border-color: var(--bs-form-valid-border-color);
1148
1132
  }
@@ -1196,36 +1180,18 @@
1196
1180
  }
1197
1181
  .was-validated .form-control:invalid, .form-control.is-invalid {
1198
1182
  border-color: var(--bs-form-invalid-border-color);
1199
- padding-right: calc(1.42857em + 0.5rem);
1200
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc2626'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc2626' stroke='none'/%3e%3c/svg%3e");
1201
- background-repeat: no-repeat;
1202
- background-position: right calc(0.35714em + 0.125rem) center;
1203
- background-size: calc(0.71429em + 0.25rem) calc(0.71429em + 0.25rem);
1204
1183
  }
1205
1184
  .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
1206
1185
  border-color: var(--bs-form-invalid-border-color);
1207
1186
  box-shadow: 0 0 0 2px rgba(var(--bs-danger-rgb), 0.25);
1208
1187
  }
1209
- .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
1210
- padding-right: calc(1.42857em + 0.5rem);
1211
- background-position: top calc(0.35714em + 0.125rem) right calc(0.35714em + 0.125rem);
1212
- }
1213
1188
  .was-validated .form-select:invalid, .form-select.is-invalid {
1214
1189
  border-color: var(--bs-form-invalid-border-color);
1215
1190
  }
1216
- .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] {
1217
- --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc2626'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc2626' stroke='none'/%3e%3c/svg%3e");
1218
- padding-right: 3.4375rem;
1219
- background-position: right 0.625rem center, center right 1.875rem;
1220
- background-size: 16px 12px, calc(0.71429em + 0.25rem) calc(0.71429em + 0.25rem);
1221
- }
1222
1191
  .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {
1223
1192
  border-color: var(--bs-form-invalid-border-color);
1224
1193
  box-shadow: 0 0 0 2px rgba(var(--bs-danger-rgb), 0.25);
1225
1194
  }
1226
- .was-validated .form-control-color:invalid, .form-control-color.is-invalid {
1227
- width: calc(3rem + calc(1.42857em + 0.5rem));
1228
- }
1229
1195
  .was-validated .form-check-input:invalid, .form-check-input.is-invalid {
1230
1196
  border-color: var(--bs-form-invalid-border-color);
1231
1197
  }
@@ -1358,67 +1324,67 @@
1358
1324
  }
1359
1325
  .btn-success {
1360
1326
  --bs-btn-color: #fff;
1361
- --bs-btn-bg: #16803c;
1362
- --bs-btn-border-color: #16803c;
1327
+ --bs-btn-bg: #047857;
1328
+ --bs-btn-border-color: #047857;
1363
1329
  --bs-btn-hover-color: #fff;
1364
- --bs-btn-hover-bg: #136d33;
1365
- --bs-btn-hover-border-color: #126630;
1366
- --bs-btn-focus-shadow-rgb: 57, 147, 89;
1330
+ --bs-btn-hover-bg: #03664a;
1331
+ --bs-btn-hover-border-color: #036046;
1332
+ --bs-btn-focus-shadow-rgb: 42, 140, 112;
1367
1333
  --bs-btn-active-color: #fff;
1368
- --bs-btn-active-bg: #126630;
1369
- --bs-btn-active-border-color: #11602d;
1334
+ --bs-btn-active-bg: #036046;
1335
+ --bs-btn-active-border-color: #035a41;
1370
1336
  --bs-btn-active-shadow: none;
1371
1337
  --bs-btn-disabled-color: #fff;
1372
- --bs-btn-disabled-bg: #16803c;
1373
- --bs-btn-disabled-border-color: #16803c;
1338
+ --bs-btn-disabled-bg: #047857;
1339
+ --bs-btn-disabled-border-color: #047857;
1374
1340
  }
1375
1341
  .btn-info {
1376
1342
  --bs-btn-color: #fff;
1377
- --bs-btn-bg: #0f6e8c;
1378
- --bs-btn-border-color: #0f6e8c;
1343
+ --bs-btn-bg: #0369a1;
1344
+ --bs-btn-border-color: #0369a1;
1379
1345
  --bs-btn-hover-color: #fff;
1380
- --bs-btn-hover-bg: #0d5e77;
1381
- --bs-btn-hover-border-color: #0c5870;
1382
- --bs-btn-focus-shadow-rgb: 51, 132, 157;
1346
+ --bs-btn-hover-bg: #035989;
1347
+ --bs-btn-hover-border-color: #025481;
1348
+ --bs-btn-focus-shadow-rgb: 41, 128, 175;
1383
1349
  --bs-btn-active-color: #fff;
1384
- --bs-btn-active-bg: #0c5870;
1385
- --bs-btn-active-border-color: #0b5369;
1350
+ --bs-btn-active-bg: #025481;
1351
+ --bs-btn-active-border-color: #024f79;
1386
1352
  --bs-btn-active-shadow: none;
1387
1353
  --bs-btn-disabled-color: #fff;
1388
- --bs-btn-disabled-bg: #0f6e8c;
1389
- --bs-btn-disabled-border-color: #0f6e8c;
1354
+ --bs-btn-disabled-bg: #0369a1;
1355
+ --bs-btn-disabled-border-color: #0369a1;
1390
1356
  }
1391
1357
  .btn-warning {
1392
1358
  --bs-btn-color: #fff;
1393
- --bs-btn-bg: #a15c00;
1394
- --bs-btn-border-color: #a15c00;
1359
+ --bs-btn-bg: #b45309;
1360
+ --bs-btn-border-color: #b45309;
1395
1361
  --bs-btn-hover-color: #fff;
1396
- --bs-btn-hover-bg: #894e00;
1397
- --bs-btn-hover-border-color: #814a00;
1398
- --bs-btn-focus-shadow-rgb: 175, 116, 38;
1362
+ --bs-btn-hover-bg: #994708;
1363
+ --bs-btn-hover-border-color: #904207;
1364
+ --bs-btn-focus-shadow-rgb: 191, 109, 46;
1399
1365
  --bs-btn-active-color: #fff;
1400
- --bs-btn-active-bg: #814a00;
1401
- --bs-btn-active-border-color: #794500;
1366
+ --bs-btn-active-bg: #904207;
1367
+ --bs-btn-active-border-color: #873e07;
1402
1368
  --bs-btn-active-shadow: none;
1403
1369
  --bs-btn-disabled-color: #fff;
1404
- --bs-btn-disabled-bg: #a15c00;
1405
- --bs-btn-disabled-border-color: #a15c00;
1370
+ --bs-btn-disabled-bg: #b45309;
1371
+ --bs-btn-disabled-border-color: #b45309;
1406
1372
  }
1407
1373
  .btn-danger {
1408
1374
  --bs-btn-color: #fff;
1409
- --bs-btn-bg: #dc2626;
1410
- --bs-btn-border-color: #dc2626;
1375
+ --bs-btn-bg: #e7000b;
1376
+ --bs-btn-border-color: #e7000b;
1411
1377
  --bs-btn-hover-color: #fff;
1412
- --bs-btn-hover-bg: #bb2020;
1413
- --bs-btn-hover-border-color: #b01e1e;
1414
- --bs-btn-focus-shadow-rgb: 225, 71, 71;
1378
+ --bs-btn-hover-bg: #c40009;
1379
+ --bs-btn-hover-border-color: #b90009;
1380
+ --bs-btn-focus-shadow-rgb: 235, 38, 48;
1415
1381
  --bs-btn-active-color: #fff;
1416
- --bs-btn-active-bg: #b01e1e;
1417
- --bs-btn-active-border-color: #a51d1d;
1382
+ --bs-btn-active-bg: #b90009;
1383
+ --bs-btn-active-border-color: #ad0008;
1418
1384
  --bs-btn-active-shadow: none;
1419
1385
  --bs-btn-disabled-color: #fff;
1420
- --bs-btn-disabled-bg: #dc2626;
1421
- --bs-btn-disabled-border-color: #dc2626;
1386
+ --bs-btn-disabled-bg: #e7000b;
1387
+ --bs-btn-disabled-border-color: #e7000b;
1422
1388
  }
1423
1389
  .btn-light {
1424
1390
  --bs-btn-color: #0a0a0a;
@@ -1485,67 +1451,67 @@
1485
1451
  --bs-gradient: none;
1486
1452
  }
1487
1453
  .btn-outline-success {
1488
- --bs-btn-color: #16803c;
1489
- --bs-btn-border-color: #16803c;
1454
+ --bs-btn-color: #047857;
1455
+ --bs-btn-border-color: #047857;
1490
1456
  --bs-btn-hover-color: #fff;
1491
- --bs-btn-hover-bg: #16803c;
1492
- --bs-btn-hover-border-color: #16803c;
1493
- --bs-btn-focus-shadow-rgb: 22, 128, 60;
1457
+ --bs-btn-hover-bg: #047857;
1458
+ --bs-btn-hover-border-color: #047857;
1459
+ --bs-btn-focus-shadow-rgb: 4, 120, 87;
1494
1460
  --bs-btn-active-color: #fff;
1495
- --bs-btn-active-bg: #16803c;
1496
- --bs-btn-active-border-color: #16803c;
1461
+ --bs-btn-active-bg: #047857;
1462
+ --bs-btn-active-border-color: #047857;
1497
1463
  --bs-btn-active-shadow: none;
1498
- --bs-btn-disabled-color: #16803c;
1464
+ --bs-btn-disabled-color: #047857;
1499
1465
  --bs-btn-disabled-bg: transparent;
1500
- --bs-btn-disabled-border-color: #16803c;
1466
+ --bs-btn-disabled-border-color: #047857;
1501
1467
  --bs-gradient: none;
1502
1468
  }
1503
1469
  .btn-outline-info {
1504
- --bs-btn-color: #0f6e8c;
1505
- --bs-btn-border-color: #0f6e8c;
1470
+ --bs-btn-color: #0369a1;
1471
+ --bs-btn-border-color: #0369a1;
1506
1472
  --bs-btn-hover-color: #fff;
1507
- --bs-btn-hover-bg: #0f6e8c;
1508
- --bs-btn-hover-border-color: #0f6e8c;
1509
- --bs-btn-focus-shadow-rgb: 15, 110, 140;
1473
+ --bs-btn-hover-bg: #0369a1;
1474
+ --bs-btn-hover-border-color: #0369a1;
1475
+ --bs-btn-focus-shadow-rgb: 3, 105, 161;
1510
1476
  --bs-btn-active-color: #fff;
1511
- --bs-btn-active-bg: #0f6e8c;
1512
- --bs-btn-active-border-color: #0f6e8c;
1477
+ --bs-btn-active-bg: #0369a1;
1478
+ --bs-btn-active-border-color: #0369a1;
1513
1479
  --bs-btn-active-shadow: none;
1514
- --bs-btn-disabled-color: #0f6e8c;
1480
+ --bs-btn-disabled-color: #0369a1;
1515
1481
  --bs-btn-disabled-bg: transparent;
1516
- --bs-btn-disabled-border-color: #0f6e8c;
1482
+ --bs-btn-disabled-border-color: #0369a1;
1517
1483
  --bs-gradient: none;
1518
1484
  }
1519
1485
  .btn-outline-warning {
1520
- --bs-btn-color: #a15c00;
1521
- --bs-btn-border-color: #a15c00;
1486
+ --bs-btn-color: #b45309;
1487
+ --bs-btn-border-color: #b45309;
1522
1488
  --bs-btn-hover-color: #fff;
1523
- --bs-btn-hover-bg: #a15c00;
1524
- --bs-btn-hover-border-color: #a15c00;
1525
- --bs-btn-focus-shadow-rgb: 161, 92, 0;
1489
+ --bs-btn-hover-bg: #b45309;
1490
+ --bs-btn-hover-border-color: #b45309;
1491
+ --bs-btn-focus-shadow-rgb: 180, 83, 9;
1526
1492
  --bs-btn-active-color: #fff;
1527
- --bs-btn-active-bg: #a15c00;
1528
- --bs-btn-active-border-color: #a15c00;
1493
+ --bs-btn-active-bg: #b45309;
1494
+ --bs-btn-active-border-color: #b45309;
1529
1495
  --bs-btn-active-shadow: none;
1530
- --bs-btn-disabled-color: #a15c00;
1496
+ --bs-btn-disabled-color: #b45309;
1531
1497
  --bs-btn-disabled-bg: transparent;
1532
- --bs-btn-disabled-border-color: #a15c00;
1498
+ --bs-btn-disabled-border-color: #b45309;
1533
1499
  --bs-gradient: none;
1534
1500
  }
1535
1501
  .btn-outline-danger {
1536
- --bs-btn-color: #dc2626;
1537
- --bs-btn-border-color: #dc2626;
1502
+ --bs-btn-color: #e7000b;
1503
+ --bs-btn-border-color: #e7000b;
1538
1504
  --bs-btn-hover-color: #fff;
1539
- --bs-btn-hover-bg: #dc2626;
1540
- --bs-btn-hover-border-color: #dc2626;
1541
- --bs-btn-focus-shadow-rgb: 220, 38, 38;
1505
+ --bs-btn-hover-bg: #e7000b;
1506
+ --bs-btn-hover-border-color: #e7000b;
1507
+ --bs-btn-focus-shadow-rgb: 231, 0, 11;
1542
1508
  --bs-btn-active-color: #fff;
1543
- --bs-btn-active-bg: #dc2626;
1544
- --bs-btn-active-border-color: #dc2626;
1509
+ --bs-btn-active-bg: #e7000b;
1510
+ --bs-btn-active-border-color: #e7000b;
1545
1511
  --bs-btn-active-shadow: none;
1546
- --bs-btn-disabled-color: #dc2626;
1512
+ --bs-btn-disabled-color: #e7000b;
1547
1513
  --bs-btn-disabled-bg: transparent;
1548
- --bs-btn-disabled-border-color: #dc2626;
1514
+ --bs-btn-disabled-border-color: #e7000b;
1549
1515
  --bs-gradient: none;
1550
1516
  }
1551
1517
  .btn-outline-light {
@@ -2470,25 +2436,25 @@
2470
2436
  color: var(--bs-breadcrumb-item-active-color);
2471
2437
  }
2472
2438
  .pagination {
2473
- --bs-pagination-padding-x: 0.75rem;
2474
- --bs-pagination-padding-y: 0.375rem;
2439
+ --bs-pagination-padding-x: 0;
2440
+ --bs-pagination-padding-y: 0;
2475
2441
  --bs-pagination-font-size: 0.875rem;
2476
2442
  --bs-pagination-color: var(--moo-muted-foreground);
2477
- --bs-pagination-bg: var(--bs-body-bg);
2443
+ --bs-pagination-bg: transparent;
2478
2444
  --bs-pagination-border-width: var(--bs-border-width);
2479
2445
  --bs-pagination-border-color: transparent;
2480
- --bs-pagination-border-radius: var(--bs-border-radius);
2446
+ --bs-pagination-border-radius: var(--bs-border-radius-lg);
2481
2447
  --bs-pagination-hover-color: var(--bs-body-color);
2482
- --bs-pagination-hover-bg: var(--moo-muted-surface);
2448
+ --bs-pagination-hover-bg: color-mix(in srgb, var(--moo-muted-surface) 50%, transparent);
2483
2449
  --bs-pagination-hover-border-color: transparent;
2484
2450
  --bs-pagination-focus-color: var(--bs-link-hover-color);
2485
- --bs-pagination-focus-bg: var(--moo-muted-surface);
2451
+ --bs-pagination-focus-bg: color-mix(in srgb, var(--moo-muted-surface) 50%, transparent);
2486
2452
  --bs-pagination-focus-box-shadow: 0 0 0 2px rgba(23, 23, 23, 0.25);
2487
2453
  --bs-pagination-active-color: var(--bs-body-color);
2488
- --bs-pagination-active-bg: var(--moo-muted-surface);
2454
+ --bs-pagination-active-bg: color-mix(in srgb, var(--moo-muted-surface) 50%, transparent);
2489
2455
  --bs-pagination-active-border-color: var(--moo-border);
2490
2456
  --bs-pagination-disabled-color: var(--moo-disabled-foreground);
2491
- --bs-pagination-disabled-bg: var(--bs-secondary-bg);
2457
+ --bs-pagination-disabled-bg: transparent;
2492
2458
  --bs-pagination-disabled-border-color: transparent;
2493
2459
  display: flex;
2494
2460
  padding-left: 0;
@@ -2559,12 +2525,12 @@
2559
2525
  }
2560
2526
  }
2561
2527
  .badge {
2562
- --bs-badge-padding-x: 0.65em;
2563
- --bs-badge-padding-y: 0.35em;
2564
- --bs-badge-font-size: 0.75em;
2528
+ --bs-badge-padding-x: 0.5rem;
2529
+ --bs-badge-padding-y: 0.125rem;
2530
+ --bs-badge-font-size: 0.75rem;
2565
2531
  --bs-badge-font-weight: 500;
2566
2532
  --bs-badge-color: #fff;
2567
- --bs-badge-border-radius: var(--bs-border-radius);
2533
+ --bs-badge-border-radius: var(--bs-border-radius-pill);
2568
2534
  display: inline-block;
2569
2535
  padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);
2570
2536
  font-size: var(--bs-badge-font-size);
@@ -2669,18 +2635,18 @@
2669
2635
  .btn-close {
2670
2636
  --bs-btn-close-color: #0a0a0a;
2671
2637
  --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a0a0a'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");
2672
- --bs-btn-close-opacity: 0.5;
2673
- --bs-btn-close-hover-opacity: 0.75;
2638
+ --bs-btn-close-opacity: 1;
2639
+ --bs-btn-close-hover-opacity: 1;
2674
2640
  --bs-btn-close-focus-shadow: 0 0 0 2px rgba(23, 23, 23, 0.25);
2675
2641
  --bs-btn-close-focus-opacity: 1;
2676
- --bs-btn-close-disabled-opacity: 0.25;
2642
+ --bs-btn-close-disabled-opacity: 0.5;
2677
2643
  --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
2678
2644
  box-sizing: content-box;
2679
- width: 1em;
2680
- height: 1em;
2681
- padding: 0.25em 0.25em;
2645
+ width: 0.75rem;
2646
+ height: 0.75rem;
2647
+ padding: 0.34375rem 0.34375rem;
2682
2648
  color: var(--bs-btn-close-color);
2683
- background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;
2649
+ background: transparent var(--bs-btn-close-bg) center/0.75rem auto no-repeat;
2684
2650
  border: 0;
2685
2651
  border-radius: 0.5rem;
2686
2652
  opacity: var(--bs-btn-close-opacity);
@@ -2806,7 +2772,7 @@
2806
2772
  pointer-events: none;
2807
2773
  }
2808
2774
  .modal.fade .modal-dialog {
2809
- transition: transform 0.3s ease-out;
2775
+ transition: transform var(--moo-overlay-motion-duration, 0.3s) ease-out;
2810
2776
  transform: translate(0, -50px);
2811
2777
  }
2812
2778
  @media (prefers-reduced-motion: reduce) {
@@ -3107,6 +3073,7 @@
3107
3073
  border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;
3108
3074
  border-top-color: var(--bs-tooltip-bg);
3109
3075
  }
3076
+
3110
3077
  /* rtl:begin:ignore */
3111
3078
  .bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow {
3112
3079
  left: calc(-1 * var(--bs-tooltip-arrow-height));
@@ -3118,6 +3085,7 @@
3118
3085
  border-width: calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;
3119
3086
  border-right-color: var(--bs-tooltip-bg);
3120
3087
  }
3088
+
3121
3089
  /* rtl:end:ignore */
3122
3090
  .bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow {
3123
3091
  top: calc(-1 * var(--bs-tooltip-arrow-height));
@@ -3127,6 +3095,7 @@
3127
3095
  border-width: 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);
3128
3096
  border-bottom-color: var(--bs-tooltip-bg);
3129
3097
  }
3098
+
3130
3099
  /* rtl:begin:ignore */
3131
3100
  .bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow {
3132
3101
  right: calc(-1 * var(--bs-tooltip-arrow-height));
@@ -3138,6 +3107,7 @@
3138
3107
  border-width: calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);
3139
3108
  border-left-color: var(--bs-tooltip-bg);
3140
3109
  }
3110
+
3141
3111
  /* rtl:end:ignore */
3142
3112
  .tooltip-inner {
3143
3113
  max-width: var(--bs-tooltip-max-width);
@@ -3224,6 +3194,7 @@
3224
3194
  bottom: var(--bs-popover-border-width);
3225
3195
  border-top-color: var(--bs-popover-bg);
3226
3196
  }
3197
+
3227
3198
  /* rtl:begin:ignore */
3228
3199
  .bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow {
3229
3200
  left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
@@ -3241,6 +3212,7 @@
3241
3212
  left: var(--bs-popover-border-width);
3242
3213
  border-right-color: var(--bs-popover-bg);
3243
3214
  }
3215
+
3244
3216
  /* rtl:end:ignore */
3245
3217
  .bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow {
3246
3218
  top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
@@ -3266,6 +3238,7 @@
3266
3238
  content: "";
3267
3239
  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);
3268
3240
  }
3241
+
3269
3242
  /* rtl:begin:ignore */
3270
3243
  .bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow {
3271
3244
  right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
@@ -3283,6 +3256,7 @@
3283
3256
  right: var(--bs-popover-border-width);
3284
3257
  border-left-color: var(--bs-popover-bg);
3285
3258
  }
3259
+
3286
3260
  /* rtl:end:ignore */
3287
3261
  .popover-header {
3288
3262
  padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);
@@ -3312,7 +3286,7 @@
3312
3286
  --bs-offcanvas-border-width: var(--bs-border-width);
3313
3287
  --bs-offcanvas-border-color: var(--bs-border-color-translucent);
3314
3288
  --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);
3315
- --bs-offcanvas-transition: transform 0.3s ease-in-out;
3289
+ --bs-offcanvas-transition: transform var(--moo-overlay-motion-duration, 0.3s) ease-in-out;
3316
3290
  --bs-offcanvas-title-line-height: 1.5;
3317
3291
  }
3318
3292
  @media (max-width: 575.98px) {
@@ -3821,223 +3795,79 @@
3821
3795
  color: #fff !important;
3822
3796
  background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;
3823
3797
  }
3824
- :is(.btn, a, button, summary, [tabindex]):not(input, textarea, select):focus-visible {
3825
- outline: var(--bs-focus-ring-width) solid var(--moo-ring);
3826
- outline-offset: var(--bs-focus-ring-width);
3827
- box-shadow: none;
3828
- }
3829
- .form-control.is-invalid,
3830
- .form-control.is-invalid:focus,
3831
- .form-select.is-invalid,
3832
- .form-select.is-invalid:focus {
3833
- box-shadow: 0 0 0 var(--bs-focus-ring-width) color-mix(in srgb, var(--bs-form-invalid-border-color) 20%, transparent);
3798
+
3799
+ /* Moo Components */
3800
+
3801
+ /* Keyboard keys */
3802
+ kbd {
3803
+ display: inline-flex;
3804
+ height: 1.25rem;
3805
+ min-width: 1.25rem;
3806
+ align-items: center;
3807
+ justify-content: center;
3808
+ font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
3809
+ line-height: 1rem;
3810
+ font-weight: 500;
3834
3811
  }
3835
- .btn-check:focus-visible + .btn {
3836
- outline: var(--bs-focus-ring-width) solid var(--moo-ring);
3837
- outline-offset: var(--bs-focus-ring-width);
3838
- box-shadow: none;
3812
+
3813
+ /* Input */
3814
+ .form-control {
3815
+ min-height: 2rem;
3839
3816
  }
3840
- .input-group > .dropdown-toggle[aria-expanded="true"]:focus-visible {
3841
- outline: 0;
3817
+ .form-control:not(textarea):not([type="file"]):not(.form-control-sm, .form-control-lg) {
3818
+ min-height: calc(2rem + var(--bs-border-width) * 2);
3842
3819
  }
3843
- :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 ) {
3844
- --scroll-fade-size: min(12%, 2.5rem);
3845
- --scroll-fade-reveal: 6rem;
3846
- --moo-scroll-fade-t-size: var(--scroll-fade-size);
3847
- --moo-scroll-fade-b-size: var(--scroll-fade-size);
3848
- --moo-scroll-fade-s-size: var(--scroll-fade-size);
3849
- --moo-scroll-fade-e-size: var(--scroll-fade-size);
3850
- --moo-scroll-fade-mask: linear-gradient(
3851
- to bottom,
3852
- transparent 0,
3853
- #000 var(--moo-scroll-fade-t),
3854
- #000 calc(100% - var(--moo-scroll-fade-b)),
3855
- transparent 100%
3856
- );
3857
- mask-image: var(--moo-scroll-fade-mask);
3820
+ .form-control[type="file"]:not(.form-control-sm, .form-control-lg)::file-selector-button {
3821
+ min-height: calc(2rem - var(--bs-border-width) * 2);
3858
3822
  }
3859
- .scroll-fade,
3860
- .scroll-fade-y {
3861
- animation-name: moo-scroll-fade-reveal-t, moo-scroll-fade-reveal-b;
3862
- animation-duration: 1ms, 1ms;
3863
- animation-fill-mode: both, both;
3864
- animation-timing-function: linear, linear;
3865
- animation-timeline: scroll(self y), scroll(self y);
3866
- animation-range: 0 var(--scroll-fade-reveal), calc(100% - var(--scroll-fade-reveal)) 100%;
3823
+ .form-control[type="time"] {
3824
+ appearance: none;
3825
+ position: relative;
3867
3826
  }
3868
- .scroll-fade-t {
3869
- animation-name: moo-scroll-fade-reveal-t;
3870
- animation-duration: 1ms;
3871
- animation-fill-mode: both;
3872
- animation-timing-function: linear;
3873
- animation-timeline: scroll(self y);
3874
- animation-range: 0 var(--scroll-fade-reveal);
3827
+ .form-control[type="time"]::-webkit-calendar-picker-indicator {
3828
+ position: absolute;
3829
+ inset: 0;
3830
+ width: 100%;
3831
+ height: 100%;
3832
+ opacity: 0;
3833
+ cursor: pointer;
3875
3834
  }
3876
- .scroll-fade-b {
3877
- animation-name: moo-scroll-fade-reveal-b;
3878
- animation-duration: 1ms;
3879
- animation-fill-mode: both;
3880
- animation-timing-function: linear;
3881
- animation-timeline: scroll(self y);
3882
- animation-range: calc(100% - var(--scroll-fade-reveal)) 100%;
3835
+ .form-control:disabled,
3836
+ .form-select:disabled {
3837
+ opacity: var(--moo-disabled-control-opacity);
3883
3838
  }
3884
- .scroll-fade-x,
3885
- .scroll-fade-s,
3886
- .scroll-fade-e {
3887
- --moo-scroll-fade-mask: linear-gradient(
3888
- to right,
3889
- transparent 0,
3890
- #000 var(--moo-scroll-fade-s),
3891
- #000 calc(100% - var(--moo-scroll-fade-e)),
3892
- transparent 100%
3893
- );
3839
+
3840
+ /* Textarea */
3841
+ textarea.form-control:not(.form-control-sm, .form-control-lg) {
3842
+ padding: 0.5rem 0.75rem;
3894
3843
  }
3895
- .scroll-fade-x {
3896
- animation-name: moo-scroll-fade-reveal-s, moo-scroll-fade-reveal-e;
3897
- animation-duration: 1ms, 1ms;
3898
- animation-fill-mode: both, both;
3899
- animation-timing-function: linear, linear;
3900
- animation-timeline: scroll(self inline), scroll(self inline);
3901
- animation-range: 0 var(--scroll-fade-reveal), calc(100% - var(--scroll-fade-reveal)) 100%;
3844
+ textarea.form-control:disabled {
3845
+ resize: none;
3902
3846
  }
3903
- .scroll-fade-s {
3904
- animation-name: moo-scroll-fade-reveal-s;
3905
- animation-duration: 1ms;
3906
- animation-fill-mode: both;
3907
- animation-timing-function: linear;
3908
- animation-timeline: scroll(self inline);
3909
- animation-range: 0 var(--scroll-fade-reveal);
3910
- }
3911
- .scroll-fade-e {
3912
- animation-name: moo-scroll-fade-reveal-e;
3913
- animation-duration: 1ms;
3914
- animation-fill-mode: both;
3915
- animation-timing-function: linear;
3916
- animation-timeline: scroll(self inline);
3917
- animation-range: calc(100% - var(--scroll-fade-reveal)) 100%;
3918
- }
3919
- .scroll-fade-x:where([dir="rtl"], [dir="rtl"] *),
3920
- .scroll-fade-s:where([dir="rtl"], [dir="rtl"] *),
3921
- .scroll-fade-e:where([dir="rtl"], [dir="rtl"] *) {
3922
- --moo-scroll-fade-mask: linear-gradient(
3923
- to left,
3924
- transparent 0,
3925
- #000 var(--moo-scroll-fade-s),
3926
- #000 calc(100% - var(--moo-scroll-fade-e)),
3927
- transparent 100%
3928
- );
3929
- }
3930
- .scroll-fade-l,
3931
- .scroll-fade-r {
3932
- --moo-scroll-fade-mask: linear-gradient(
3933
- to right,
3934
- transparent 0,
3935
- #000 var(--moo-scroll-fade-s),
3936
- #000 calc(100% - var(--moo-scroll-fade-e)),
3937
- transparent 100%
3938
- );
3939
- }
3940
- .scroll-fade-l {
3941
- animation-name: moo-scroll-fade-reveal-s;
3942
- animation-duration: 1ms;
3943
- animation-fill-mode: both;
3944
- animation-timing-function: linear;
3945
- animation-timeline: scroll(self x);
3946
- animation-range: 0 var(--scroll-fade-reveal);
3947
- }
3948
- .scroll-fade-r {
3949
- animation-name: moo-scroll-fade-reveal-e;
3950
- animation-duration: 1ms;
3951
- animation-fill-mode: both;
3952
- animation-timing-function: linear;
3953
- animation-timeline: scroll(self x);
3954
- animation-range: calc(100% - var(--scroll-fade-reveal)) 100%;
3955
- }
3956
- .scroll-fade-none {
3957
- --moo-scroll-fade-mask: none;
3958
- }
3959
- .no-scrollbar {
3960
- scrollbar-width: none;
3961
- }
3962
- .no-scrollbar::-webkit-scrollbar {
3963
- display: none;
3964
- }
3965
- .scrollbar-thin {
3966
- --moo-scrollbar-thin-size: 0.375rem;
3967
- --moo-scrollbar-thin-thumb-bg: color-mix(in srgb, var(--bs-secondary-color) 28%, transparent);
3968
- --moo-scrollbar-thin-thumb-hover-bg: color-mix(in srgb, var(--bs-secondary-color) 45%, transparent);
3969
- scrollbar-color: var(--moo-scrollbar-thin-thumb-bg) transparent;
3970
- scrollbar-width: thin;
3971
- }
3972
- .scrollbar-thin::-webkit-scrollbar {
3973
- width: var(--moo-scrollbar-thin-size);
3974
- height: var(--moo-scrollbar-thin-size);
3975
- }
3976
- .scrollbar-thin::-webkit-scrollbar-track {
3977
- background: transparent;
3978
- }
3979
- .scrollbar-thin::-webkit-scrollbar-thumb {
3980
- border-radius: var(--bs-border-radius-pill);
3981
- background-color: var(--moo-scrollbar-thin-thumb-bg);
3982
- }
3983
- .scrollbar-thin::-webkit-scrollbar-thumb:hover {
3984
- background-color: var(--moo-scrollbar-thin-thumb-hover-bg);
3985
- }
3986
- @supports not (animation-timeline: scroll()) {
3987
- .scroll-fade,
3988
- .scroll-fade-y {
3989
- --moo-scroll-fade-t: var(--moo-scroll-fade-t-size);
3990
- --moo-scroll-fade-b: var(--moo-scroll-fade-b-size);
3991
- }
3992
- .scroll-fade-x {
3993
- --moo-scroll-fade-s: var(--moo-scroll-fade-s-size);
3994
- --moo-scroll-fade-e: var(--moo-scroll-fade-e-size);
3995
- }
3996
- .scroll-fade-t {
3997
- --moo-scroll-fade-t: var(--moo-scroll-fade-t-size);
3998
- }
3999
- .scroll-fade-b {
4000
- --moo-scroll-fade-b: var(--moo-scroll-fade-b-size);
4001
- }
4002
- .scroll-fade-l,
4003
- .scroll-fade-s {
4004
- --moo-scroll-fade-s: var(--moo-scroll-fade-s-size);
4005
- }
4006
- .scroll-fade-r,
4007
- .scroll-fade-e {
4008
- --moo-scroll-fade-e: var(--moo-scroll-fade-e-size);
4009
- }
4010
- }
4011
- kbd {
4012
- font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
4013
- line-height: 1rem;
4014
- font-weight: 500;
4015
- border: var(--bs-border-width) solid var(--bs-border-color);
4016
- }
4017
- .form-control {
4018
- min-height: 2rem;
4019
- }
4020
- .form-control:disabled,
4021
- .form-select:disabled {
4022
- opacity: var(--moo-disabled-control-opacity);
4023
- }
4024
- textarea.form-control:not(.form-control-sm, .form-control-lg) {
4025
- padding: 0.5rem 0.75rem;
4026
- }
4027
- textarea.form-control:disabled {
4028
- resize: none;
3847
+
3848
+ /* Select */
3849
+ .form-select option,
3850
+ .form-select optgroup {
3851
+ color: var(--bs-body-color);
3852
+ background-color: var(--bs-body-bg);
4029
3853
  }
3854
+
3855
+ /* Input Group */
4030
3856
  .input-group:not(:has(> .form-control[type="file"])) {
4031
3857
  border: var(--bs-border-width) solid var(--moo-border);
4032
3858
  border-radius: var(--moo-input-group-border-radius);
3859
+ background-color: var(--moo-input-bg, transparent);
3860
+ }
3861
+ .input-group:not(:has(> .form-control[type="file"])):not(:has(> .dropdown-menu)) {
3862
+ overflow: hidden;
4033
3863
  }
4034
3864
  .input-group.rounded-pill:not(:has(> .form-control[type="file"])) {
4035
3865
  --moo-input-group-border-radius: var(--bs-border-radius-pill);
4036
3866
  }
4037
- .input-group:not(:has(textarea)):not(:has(> .form-control[type="file"])) {
3867
+ .input-group:not(:has(> :is(.valid-feedback, .invalid-feedback, .valid-tooltip, .invalid-tooltip))):not(:has(textarea)):not(:has(> .form-control[type="file"])):not(:has(> [data-align])) {
4038
3868
  height: calc(2rem + var(--bs-border-width) * 2);
4039
3869
  }
4040
- .input-group:not(:has(textarea)):not(:has(> .form-control[type="file"])) > .form-control {
3870
+ .input-group:not(:has(> :is(.valid-feedback, .invalid-feedback, .valid-tooltip, .invalid-tooltip))):not(:has(textarea)):not(:has(> .form-control[type="file"])):not(:has(> [data-align])) > .form-control {
4041
3871
  min-height: 0;
4042
3872
  }
4043
3873
  .input-group > textarea.form-control {
@@ -4076,7 +3906,7 @@
4076
3906
  border-radius: var(--moo-input-group-border-radius);
4077
3907
  background-color: var(--moo-muted-surface);
4078
3908
  opacity: 0;
4079
- transition: opacity opacity 0.15s linear;
3909
+ transition: opacity 0.15s linear;
4080
3910
  }
4081
3911
  .input-group > .btn-ghost:hover::before,
4082
3912
  .input-group > .btn-ghost:is(.show, [aria-expanded="true"])::before {
@@ -4086,10 +3916,10 @@
4086
3916
  color: var(--bs-btn-active-color);
4087
3917
  }
4088
3918
  .input-group > .btn-ghost[aria-pressed="true"] {
4089
- color: var(--bs-primary);
3919
+ color: var(--bs-btn-active-color);
4090
3920
  }
4091
3921
  .input-group > .btn-ghost[aria-pressed="true"]::before {
4092
- opacity: 0;
3922
+ opacity: 1;
4093
3923
  }
4094
3924
  .input-group > .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active {
4095
3925
  transform: none;
@@ -4101,7 +3931,6 @@
4101
3931
  }
4102
3932
  .input-group > .input-group-text {
4103
3933
  color: var(--bs-secondary-color);
4104
- background-color: transparent;
4105
3934
  }
4106
3935
  .input-group > .input-group-text:first-child {
4107
3936
  padding-inline-end: 0;
@@ -4140,14 +3969,12 @@
4140
3969
  border: 0;
4141
3970
  background-color: transparent;
4142
3971
  }
4143
- .input-group:has(> .form-control:focus):not(:has(> .form-control[type="file"])) {
4144
- border-color: #8b8b8b;
4145
- box-shadow: 0 0 0 2px rgba(23, 23, 23, 0.25);
4146
- }
4147
3972
  .input-group:not(:has(> .form-control[type="file"])) > :is(.form-control, .form-select):focus {
4148
3973
  outline: 0;
4149
3974
  box-shadow: none;
4150
3975
  }
3976
+
3977
+ /* Buttons */
4151
3978
  .btn {
4152
3979
  display: inline-flex;
4153
3980
  align-items: center;
@@ -4203,13 +4030,21 @@ label.btn {
4203
4030
  :is(.btn-xs, .btn-sm, .btn-group-sm > .btn, .btn-group-sm > .btn-group > .btn):not(.btn-icon, .btn-icon-xs, .btn-icon-sm, .btn-icon-lg):has(> [data-icon="inline-end"]) {
4204
4031
  padding-inline-end: 0.375rem;
4205
4032
  }
4033
+ .btn-icon {
4034
+ --bs-btn-line-height: 1.25rem;
4035
+ --bs-btn-padding-y: 0.3125rem;
4036
+ }
4206
4037
  .btn-icon,
4207
4038
  .btn-icon-xs,
4208
4039
  .btn-icon-sm,
4209
4040
  .btn-icon-lg {
4210
- padding: 0;
4211
- inline-size: calc( var(--bs-btn-line-height) + var(--bs-btn-padding-y) + var(--bs-btn-padding-y) + var(--bs-btn-border-width) + var(--bs-btn-border-width));
4212
- aspect-ratio: 1;
4041
+ --moo-btn-icon-size: calc(
4042
+ var(--bs-btn-line-height) +
4043
+ var(--bs-btn-padding-y) * 2 +
4044
+ var(--bs-btn-border-width) * 2);
4045
+ padding-inline: 0;
4046
+ inline-size: var(--moo-btn-icon-size);
4047
+ block-size: var(--moo-btn-icon-size);
4213
4048
  }
4214
4049
  :is(.btn-icon, .btn-icon-xs, .btn-icon-sm, .btn-icon-lg)::after {
4215
4050
  display: none;
@@ -4261,19 +4096,19 @@ label.btn {
4261
4096
  --bs-btn-disabled-bg: transparent;
4262
4097
  }
4263
4098
  .btn-primary {
4264
- --bs-btn-color: var(--moo-surface);
4265
- --bs-btn-bg: var(--moo-foreground);
4266
- --bs-btn-hover-bg: color-mix(in srgb, var(--moo-foreground) 88%, var(--moo-surface));
4267
- --bs-btn-active-bg: color-mix(in srgb, var(--moo-foreground) 80%, var(--moo-surface));
4099
+ --bs-btn-color: var(--moo-primary-foreground);
4100
+ --bs-btn-bg: var(--moo-primary);
4101
+ --bs-btn-hover-bg: color-mix(in srgb, var(--moo-primary) 80%, var(--moo-surface));
4102
+ --bs-btn-active-bg: color-mix(in srgb, var(--moo-primary) 72%, var(--moo-surface));
4268
4103
  }
4269
4104
  .btn-secondary {
4270
4105
  --bs-btn-color: var(--moo-foreground);
4271
- --bs-btn-bg: var(--moo-muted-surface);
4106
+ --bs-btn-bg: var(--moo-surface);
4272
4107
  --bs-btn-border-color: var(--moo-border);
4273
- --bs-btn-hover-bg: color-mix(in srgb, var(--moo-muted-surface) 86%, var(--moo-foreground));
4274
- --bs-btn-hover-border-color: color-mix(in srgb, var(--moo-border) 80%, var(--moo-foreground));
4275
- --bs-btn-active-bg: color-mix(in srgb, var(--moo-muted-surface) 78%, var(--moo-foreground));
4276
- --bs-btn-active-border-color: color-mix(in srgb, var(--moo-border) 72%, var(--moo-foreground));
4108
+ --bs-btn-hover-bg: color-mix(in srgb, var(--moo-muted-surface) 95%, var(--moo-foreground));
4109
+ --bs-btn-hover-border-color: color-mix(in srgb, var(--moo-border) 90%, var(--moo-foreground));
4110
+ --bs-btn-active-bg: color-mix(in srgb, var(--moo-muted-surface) 88%, var(--moo-foreground));
4111
+ --bs-btn-active-border-color: color-mix(in srgb, var(--moo-border) 82%, var(--moo-foreground));
4277
4112
  }
4278
4113
  .btn-outline-secondary {
4279
4114
  --bs-btn-color: var(--moo-foreground);
@@ -4300,15 +4135,128 @@ label.btn {
4300
4135
  }
4301
4136
  .btn-danger {
4302
4137
  --bs-btn-color: var(--moo-destructive-foreground);
4303
- --bs-btn-bg: var(--moo-destructive);
4304
- --bs-btn-hover-bg: color-mix(in srgb, var(--moo-destructive) 88%, var(--moo-foreground));
4305
- --bs-btn-active-bg: color-mix(in srgb, var(--moo-destructive) 80%, var(--moo-foreground));
4138
+ --bs-btn-bg: var(--moo-destructive-surface);
4139
+ --bs-btn-border-color: transparent;
4140
+ --bs-btn-hover-color: var(--moo-destructive-foreground);
4141
+ --bs-btn-hover-bg: var(--moo-destructive-surface-hover);
4142
+ --bs-btn-hover-border-color: transparent;
4143
+ --bs-btn-active-color: var(--moo-destructive-foreground);
4144
+ --bs-btn-active-bg: var(--moo-destructive-surface-hover);
4145
+ --bs-btn-active-border-color: transparent;
4306
4146
  }
4307
4147
  .btn-link {
4308
4148
  --bs-btn-color: var(--moo-foreground);
4309
4149
  --bs-btn-hover-color: var(--moo-muted-foreground);
4310
4150
  text-underline-offset: 0.25rem;
4311
4151
  }
4152
+
4153
+ /* Search Trigger */
4154
+ .search-trigger {
4155
+ width: 10rem;
4156
+ max-width: 100%;
4157
+ flex: 0 1 10rem;
4158
+ min-width: 0;
4159
+ justify-content: space-between;
4160
+ height: 2rem;
4161
+ padding: 0.5rem 0.75rem;
4162
+ color: var(--bs-secondary-color);
4163
+ border: var(--bs-border-width) solid transparent;
4164
+ border-radius: var(--bs-border-radius);
4165
+ background: color-mix(in srgb, var(--bs-secondary-bg) 55%, var(--bs-body-bg));
4166
+ font-size: 0.875rem;
4167
+ font-weight: 400;
4168
+ box-shadow: none;
4169
+ }
4170
+ .search-trigger:hover {
4171
+ color: var(--bs-secondary-color);
4172
+ border-color: transparent;
4173
+ background: color-mix(in srgb, var(--bs-secondary-bg) 78%, var(--bs-body-bg));
4174
+ }
4175
+ .search-trigger:focus-visible {
4176
+ color: var(--bs-secondary-color);
4177
+ border-color: transparent;
4178
+ background: color-mix(in srgb, var(--bs-secondary-bg) 78%, var(--bs-body-bg));
4179
+ }
4180
+ .search-trigger__label {
4181
+ display: inline-flex;
4182
+ min-width: 0;
4183
+ align-items: center;
4184
+ gap: 0.5rem;
4185
+ overflow: hidden;
4186
+ text-overflow: ellipsis;
4187
+ white-space: nowrap;
4188
+ }
4189
+ .search-trigger__shortcut {
4190
+ display: inline-flex;
4191
+ flex: 0 0 auto;
4192
+ align-items: center;
4193
+ gap: 0.25rem;
4194
+ margin-inline-start: auto;
4195
+ }
4196
+ @media (min-width: 992px) {
4197
+ .search-trigger {
4198
+ width: 13rem;
4199
+ flex-basis: 13rem;
4200
+ }
4201
+ }
4202
+ @media (min-width: 1400px) {
4203
+ .search-trigger {
4204
+ width: 16rem;
4205
+ flex-basis: 16rem;
4206
+ }
4207
+ }
4208
+
4209
+ /* Close Button */
4210
+ .btn-close {
4211
+ --bs-btn-close-color: var(--moo-foreground);
4212
+ --bs-btn-hover-color: var(--bs-btn-close-color);
4213
+ --bs-btn-hover-bg: var(--moo-muted-surface);
4214
+ --bs-btn-hover-border-color: transparent;
4215
+ --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%230a0a0a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M18 6 6 18'/%3e%3cpath d='m6 6 12 12'/%3e%3c/svg%3e");
4216
+ display: inline-flex;
4217
+ flex: 0 0 auto;
4218
+ align-items: center;
4219
+ justify-content: center;
4220
+ border-width: var(--bs-border-width);
4221
+ border-style: var(--bs-border-style);
4222
+ border-color: transparent;
4223
+ border-radius: var(--bs-border-radius-pill);
4224
+ color: var(--bs-btn-close-color);
4225
+ background-image: none;
4226
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
4227
+ }
4228
+ .btn-close::before {
4229
+ width: 0.75rem;
4230
+ height: 0.75rem;
4231
+ content: "";
4232
+ background-color: currentColor;
4233
+ -webkit-mask: var(--bs-btn-close-bg) center/contain no-repeat;
4234
+ mask: var(--bs-btn-close-bg) center/contain no-repeat;
4235
+ }
4236
+ :scope[data-bs-theme="light"] .btn-close,
4237
+ :scope[data-bs-theme="dark"] .btn-close {
4238
+ filter: none;
4239
+ }
4240
+ .btn-close:hover {
4241
+ border-color: var(--bs-btn-hover-border-color);
4242
+ color: var(--bs-btn-hover-color);
4243
+ background-color: var(--bs-btn-hover-bg);
4244
+ }
4245
+ .btn-close:focus-visible {
4246
+ border-color: var(--moo-ring);
4247
+ color: var(--bs-btn-hover-color);
4248
+ background-color: var(--bs-btn-hover-bg);
4249
+ }
4250
+ .btn-close:focus:not(:focus-visible) {
4251
+ box-shadow: none;
4252
+ }
4253
+ .btn-close:disabled,
4254
+ .btn-close.disabled {
4255
+ pointer-events: none;
4256
+ opacity: var(--moo-disabled-control-opacity);
4257
+ }
4258
+
4259
+ /* Button Group */
4312
4260
  [dir="rtl"] .btn-group,
4313
4261
  [dir="rtl"] .btn-toolbar {
4314
4262
  direction: ltr;
@@ -4317,8 +4265,67 @@ label.btn {
4317
4265
  [dir="rtl"] .btn-toolbar > .btn {
4318
4266
  unicode-bidi: plaintext;
4319
4267
  }
4268
+ .btn-group > .btn:hover:not(:focus-visible):not(.active),
4269
+ .btn-group > .btn:focus:not(:focus-visible):not(.active),
4270
+ .btn-group > .btn:active:not(:focus-visible):not(.active),
4271
+ .btn-group-vertical > .btn:hover:not(:focus-visible):not(.active),
4272
+ .btn-group-vertical > .btn:focus:not(:focus-visible):not(.active),
4273
+ .btn-group-vertical > .btn:active:not(:focus-visible):not(.active) {
4274
+ z-index: auto;
4275
+ }
4276
+ .btn-group > .btn-check:checked + .btn:hover,
4277
+ .btn-group > .btn-check:focus + .btn:hover,
4278
+ .btn-group-vertical > .btn-check:checked + .btn:hover,
4279
+ .btn-group-vertical > .btn-check:focus + .btn:hover {
4280
+ z-index: 1;
4281
+ }
4282
+ .btn-group > .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active,
4283
+ .btn-group-vertical > .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active {
4284
+ transform: none;
4285
+ }
4286
+ .btn-group > .btn-icon,
4287
+ .btn-group > .btn-icon-xs,
4288
+ .btn-group > .btn-icon-sm,
4289
+ .btn-group > .btn-icon-lg,
4290
+ .btn-group-vertical > .btn-icon,
4291
+ .btn-group-vertical > .btn-icon-xs,
4292
+ .btn-group-vertical > .btn-icon-sm,
4293
+ .btn-group-vertical > .btn-icon-lg {
4294
+ flex: 0 0 auto;
4295
+ }
4296
+ .btn-group-vertical > .btn-icon,
4297
+ .btn-group-vertical > .btn-icon-xs,
4298
+ .btn-group-vertical > .btn-icon-sm,
4299
+ .btn-group-vertical > .btn-icon-lg {
4300
+ width: var(--moo-btn-icon-size);
4301
+ }
4302
+ .btn-group-select,
4303
+ .input-group > .btn-group-select {
4304
+ flex: 0 0 auto;
4305
+ width: auto;
4306
+ min-width: calc(1.875rem + 1rem);
4307
+ padding-inline-end: 1.875rem;
4308
+ }
4309
+
4310
+ /* Toggle Group */
4311
+ .toggle-group > .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active {
4312
+ transform: none;
4313
+ }
4314
+ .toggle-group > .btn-check:checked + .btn {
4315
+ --bs-btn-active-color: var(--moo-primary-foreground);
4316
+ --bs-btn-active-bg: var(--moo-primary);
4317
+ --bs-btn-active-border-color: var(--moo-primary);
4318
+ }
4319
+ .toggle-group > .btn-check:focus-visible + .btn,
4320
+ .toggle-group > .btn-check:checked:focus-visible + .btn {
4321
+ border-color: var(--moo-ring);
4322
+ outline: 0;
4323
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
4324
+ }
4325
+
4326
+ /* Card */
4320
4327
  .card {
4321
- --bs-card-bg: var(--moo-surface);
4328
+ --bs-card-bg: color-mix(in srgb, var(--bs-secondary-bg) 5%, var(--bs-body-bg));
4322
4329
  --bs-card-color: var(--moo-foreground);
4323
4330
  --bs-card-border-color: var(--moo-border);
4324
4331
  --bs-card-border-radius: var(--bs-border-radius-xl);
@@ -4328,26 +4335,77 @@ label.btn {
4328
4335
  --bs-card-cap-color: var(--moo-foreground);
4329
4336
  --bs-card-title-color: var(--moo-foreground);
4330
4337
  --bs-card-subtitle-color: var(--moo-muted-foreground);
4331
- gap: var(--bs-card-spacer-x);
4332
- padding-block: var(--bs-card-spacer-x);
4338
+ --moo-card-footer-bg: color-mix(in srgb, var(--bs-secondary-bg) 20%, var(--bs-body-bg));
4339
+ --moo-card-spacing: 1rem;
4340
+ gap: var(--moo-card-spacing);
4341
+ padding-block: var(--moo-card-spacing);
4342
+ border: var(--bs-card-border-width) solid var(--bs-card-border-color);
4333
4343
  box-shadow: var(--bs-card-box-shadow);
4334
4344
  }
4345
+ .card:has(.card-footer) {
4346
+ padding-block-end: 0;
4347
+ }
4348
+ .card:has(> .card-image) {
4349
+ padding-block-start: 0;
4350
+ }
4351
+ :scope[data-bs-theme="dark"] .card {
4352
+ --bs-card-bg: color-mix(in srgb, var(--bs-secondary-bg) 30%, var(--bs-body-bg));
4353
+ --moo-card-footer-bg: color-mix(in srgb, var(--bs-secondary-bg) 50%, var(--bs-body-bg));
4354
+ }
4355
+ .card--sm {
4356
+ --moo-card-spacing: 0.75rem;
4357
+ }
4335
4358
  .card-header {
4359
+ display: grid;
4360
+ grid-template-columns: 1fr auto;
4361
+ column-gap: var(--moo-card-spacing);
4362
+ align-items: flex-start;
4363
+ border-bottom: 0;
4364
+ }
4365
+ .card-header__text {
4336
4366
  display: flex;
4337
4367
  flex-direction: column;
4338
- gap: 0.375rem;
4339
- border-bottom: 0;
4368
+ gap: 0.25rem;
4369
+ min-width: 0;
4370
+ grid-column: 1;
4371
+ }
4372
+ .card-action {
4373
+ grid-column: 2;
4374
+ grid-row: 1;
4340
4375
  }
4341
4376
  .card-header,
4342
4377
  .card-body,
4343
4378
  .card-footer {
4344
4379
  padding-block: 0;
4345
4380
  }
4381
+ .card-header,
4382
+ .card-body {
4383
+ padding-inline: var(--moo-card-spacing);
4384
+ }
4346
4385
  .card-footer {
4347
4386
  display: flex;
4348
4387
  align-items: center;
4349
4388
  gap: 0.5rem;
4350
- border-top: 0;
4389
+ padding: var(--moo-card-spacing);
4390
+ border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);
4391
+ background-color: var(--moo-card-footer-bg);
4392
+ }
4393
+ .card-img-top {
4394
+ border-top-left-radius: var(--bs-card-border-radius);
4395
+ border-top-right-radius: var(--bs-card-border-radius);
4396
+ }
4397
+ .card-image {
4398
+ aspect-ratio: 16 / 9;
4399
+ overflow: hidden;
4400
+ border-top-left-radius: var(--bs-card-border-radius);
4401
+ border-top-right-radius: var(--bs-card-border-radius);
4402
+ background-color: var(--moo-muted-surface);
4403
+ }
4404
+ .card-image .card-img-top {
4405
+ width: 100%;
4406
+ height: 100%;
4407
+ object-fit: cover;
4408
+ border-radius: 0;
4351
4409
  }
4352
4410
  .card-title {
4353
4411
  margin-bottom: 0;
@@ -4359,7 +4417,21 @@ label.btn {
4359
4417
  .card-subtitle {
4360
4418
  margin-top: 0;
4361
4419
  font-size: 0.875rem;
4420
+ color: var(--moo-muted-foreground);
4421
+ }
4422
+
4423
+ /* Table */
4424
+ .card .table {
4425
+ --bs-table-bg: transparent;
4426
+ }
4427
+ .table-responsive:not(.scroll-fade-x):has(.table-row-actions > [aria-expanded="true"]) {
4428
+ overflow: visible;
4429
+ }
4430
+ .table-row-actions:has(> [aria-expanded="true"]) {
4431
+ z-index: 1000;
4362
4432
  }
4433
+
4434
+ /* Dropdown */
4363
4435
  .dropdown-menu {
4364
4436
  --bs-dropdown-bg: var(--moo-surface);
4365
4437
  --bs-dropdown-border-color: var(--moo-border);
@@ -4384,11 +4456,25 @@ label.btn {
4384
4456
  color: var(--bs-dropdown-link-color);
4385
4457
  background-color: transparent;
4386
4458
  }
4459
+ .dropdown-menu:has(.dropdown-item:hover) .dropdown-item.active:not(:hover) {
4460
+ background-color: transparent;
4461
+ }
4387
4462
  .dropdown-item > [data-icon] {
4388
4463
  width: 1rem;
4389
4464
  height: 1rem;
4390
4465
  flex: 0 0 auto;
4391
4466
  }
4467
+ .dropdown-item[data-variant="destructive"] {
4468
+ color: var(--moo-destructive) !important;
4469
+ }
4470
+ .dropdown-item[data-variant="destructive"]:hover,
4471
+ .dropdown-item[data-variant="destructive"]:focus {
4472
+ color: var(--moo-destructive) !important;
4473
+ background-color: var(--moo-destructive-surface) !important;
4474
+ }
4475
+ .dropdown-item[data-variant="destructive"] > [data-icon] {
4476
+ color: var(--moo-destructive) !important;
4477
+ }
4392
4478
  .dropdown-menu .dropdown-divider {
4393
4479
  margin-inline: calc(-1 * var(--bs-dropdown-padding-x));
4394
4480
  border-block-start: var(--bs-border-width) solid var(--bs-dropdown-divider-bg);
@@ -4408,8 +4494,8 @@ label.btn {
4408
4494
  flex: 0 0 auto;
4409
4495
  align-items: center;
4410
4496
  justify-content: center;
4411
- width: 1em;
4412
- height: 1em;
4497
+ width: 1rem;
4498
+ height: 1rem;
4413
4499
  border: var(--bs-border-width) solid var(--bs-border-color);
4414
4500
  border-radius: var(--moo-dropdown-item-check-border-radius);
4415
4501
  color: transparent;
@@ -4452,18 +4538,68 @@ label.btn {
4452
4538
  --moo-dropdown-sidebar-min-width: 14rem;
4453
4539
  min-width: max(100%, var(--moo-dropdown-sidebar-min-width));
4454
4540
  }
4541
+ [data-identity-trigger="1"] + .dropdown-menu {
4542
+ --moo-dropdown-sidebar-min-width: 14rem;
4543
+ min-width: var(--moo-dropdown-sidebar-min-width);
4544
+ }
4545
+ @media (max-width: 575.98px) {
4546
+ [data-slot="sidebar-header"] .dropend > .dropdown-menu,
4547
+ [data-slot="sidebar-footer"] .dropend > .dropdown-menu {
4548
+ left: 0 !important;
4549
+ right: 0 !important;
4550
+ min-width: 100%;
4551
+ margin: 0;
4552
+ transform: none !important;
4553
+ }
4554
+ [data-slot="sidebar-header"] .dropend > .dropdown-menu {
4555
+ top: calc(100% + 0.25rem) !important;
4556
+ bottom: auto !important;
4557
+ }
4558
+ [data-slot="sidebar-footer"] .dropend > .dropdown-menu {
4559
+ top: auto !important;
4560
+ bottom: calc(100% + 0.25rem) !important;
4561
+ }
4562
+ }
4563
+ @media (min-width: 576px) and (max-width: 991.98px) {
4564
+ [data-slot="sidebar-header"] .dropend > .dropdown-menu,
4565
+ [data-slot="sidebar-footer"] .dropend > .dropdown-menu {
4566
+ left: 0 !important;
4567
+ right: 0 !important;
4568
+ min-width: 100%;
4569
+ margin: 0;
4570
+ transform: none !important;
4571
+ }
4572
+ [data-slot="sidebar-header"] .dropend > .dropdown-menu {
4573
+ top: calc(100% + 0.25rem) !important;
4574
+ bottom: auto !important;
4575
+ }
4576
+ [data-slot="sidebar-footer"] .dropend > .dropdown-menu {
4577
+ top: auto !important;
4578
+ bottom: calc(100% + 0.25rem) !important;
4579
+ }
4580
+ }
4455
4581
  @media (min-width: 992px) {
4456
- [data-slot="sidebar-header"] [data-moo-sidebar-dropdown-positioned] > .dropdown-menu {
4582
+ [data-slot="sidebar-header"] [data-sidebar-dropdown-positioned] > .dropdown-menu,
4583
+ [data-slot="sidebar-footer"] [data-sidebar-dropdown-positioned] > .dropdown-menu {
4457
4584
  position: fixed !important;
4458
4585
  z-index: 1000;
4459
- inset-block-start: var(--moo-sidebar-dropdown-block-start) !important;
4460
- inset-inline-start: var(--moo-sidebar-dropdown-inline-start) !important;
4586
+ left: var(--moo-sidebar-dropdown-left, auto) !important;
4587
+ right: var(--moo-sidebar-dropdown-right, auto) !important;
4461
4588
  width: var(--moo-dropdown-sidebar-min-width);
4462
4589
  min-width: var(--moo-dropdown-sidebar-min-width);
4463
4590
  margin: 0;
4464
4591
  transform: none !important;
4465
4592
  }
4593
+ [data-slot="sidebar-header"] [data-sidebar-dropdown-positioned] > .dropdown-menu {
4594
+ inset-block-start: var(--moo-sidebar-dropdown-block-start) !important;
4595
+ }
4596
+ [data-slot="sidebar-footer"] [data-sidebar-dropdown-positioned] > .dropdown-menu {
4597
+ inset-block-start: auto !important;
4598
+ inset-block-end: var(--moo-sidebar-dropdown-block-end) !important;
4599
+ }
4466
4600
  }
4601
+
4602
+ /* Menubar */
4467
4603
  .menubar {
4468
4604
  gap: 0.125rem;
4469
4605
  padding: 0.1875rem;
@@ -4477,6 +4613,8 @@ label.btn {
4477
4613
  color: var(--bs-btn-color);
4478
4614
  font-weight: 500;
4479
4615
  }
4616
+
4617
+ /* Avatar */
4480
4618
  .avatar {
4481
4619
  position: relative;
4482
4620
  display: inline-flex;
@@ -4533,8 +4671,9 @@ label.btn {
4533
4671
  height: 0.9375rem;
4534
4672
  min-width: 0.9375rem;
4535
4673
  padding-inline: 0.2rem;
4674
+ border: 0;
4536
4675
  border-radius: var(--bs-border-radius-pill);
4537
- border: 2px solid var(--bs-body-bg);
4676
+ box-shadow: 0 0 0 2px var(--bs-body-bg);
4538
4677
  background-color: var(--moo-muted-surface);
4539
4678
  color: var(--moo-foreground);
4540
4679
  font-size: 0.625rem;
@@ -4551,14 +4690,14 @@ label.btn {
4551
4690
  padding-inline: 0;
4552
4691
  }
4553
4692
  .avatar-badge--icon {
4554
- width: 0.75rem;
4555
- height: 0.75rem;
4556
- min-width: 0.75rem;
4693
+ width: 0.625rem;
4694
+ height: 0.625rem;
4695
+ min-width: 0.625rem;
4557
4696
  padding-inline: 0;
4558
4697
  }
4559
4698
  .avatar-badge--icon [data-icon] {
4560
- width: 0.375rem;
4561
- height: 0.375rem;
4699
+ width: 0.5rem;
4700
+ height: 0.5rem;
4562
4701
  }
4563
4702
  .avatar-sm {
4564
4703
  width: 1.5rem;
@@ -4575,6 +4714,7 @@ label.btn {
4575
4714
  align-items: center;
4576
4715
  }
4577
4716
  .avatar-group > .avatar {
4717
+ box-shadow: 0 0 0 2px var(--bs-body-bg);
4578
4718
  z-index: 0;
4579
4719
  }
4580
4720
  .avatar-group .avatar + .avatar,
@@ -4597,6 +4737,8 @@ label.btn {
4597
4737
  content: "+";
4598
4738
  margin-inline-end: -0.1rem;
4599
4739
  }
4740
+
4741
+ /* Navigation */
4600
4742
  .nav {
4601
4743
  --bs-nav-link-color: var(--moo-foreground);
4602
4744
  --bs-nav-link-hover-color: var(--moo-foreground);
@@ -4626,6 +4768,8 @@ label.btn {
4626
4768
  height: 1rem;
4627
4769
  flex: 0 0 auto;
4628
4770
  }
4771
+
4772
+ /* Skeleton */
4629
4773
  .skeleton {
4630
4774
  color: var(--moo-border);
4631
4775
  border-radius: var(--bs-border-radius);
@@ -4634,60 +4778,8 @@ label.btn {
4634
4778
  .skeleton > .placeholder {
4635
4779
  display: block;
4636
4780
  }
4637
- .sidebar-wrapper {
4638
- --moo-sidebar-width: 16rem;
4639
- --moo-sidebar-width-icon: 3rem;
4640
- display: flex;
4641
- width: 100%;
4642
- min-height: 100svh;
4643
- }
4644
- .sidebar-wrapper--contained {
4645
- min-height: 0;
4646
- height: 34rem;
4647
- overflow: hidden;
4648
- border: var(--bs-border-width) solid var(--moo-border);
4649
- border-radius: var(--bs-border-radius-xl);
4650
- }
4651
- .sidebar {
4652
- --bs-offcanvas-width: var(--moo-sidebar-width);
4653
- flex: 0 0 var(--moo-sidebar-width);
4654
- width: var(--moo-sidebar-width);
4655
- color: var(--moo-sidebar-foreground);
4656
- }
4657
- .sidebar[data-side="left"] .sidebar-inner {
4658
- border-inline-end: var(--bs-border-width) solid var(--moo-sidebar-border);
4659
- }
4660
- .sidebar[data-side="right"] {
4661
- order: 1;
4662
- }
4663
- .sidebar[data-side="right"] .sidebar-inner {
4664
- border-inline-start: var(--bs-border-width) solid var(--moo-sidebar-border);
4665
- }
4666
- @media (min-width: 992px) {
4667
- .sidebar {
4668
- transition: flex-basis 0.2s ease, width 0.2s ease;
4669
- }
4670
- .sidebar[data-variant="floating"] .sidebar-inner {
4671
- width: auto;
4672
- height: calc(100svh - 1rem);
4673
- max-height: calc(100svh - 1rem);
4674
- margin: 0.5rem;
4675
- border: var(--bs-border-width) solid var(--moo-sidebar-border);
4676
- border-radius: var(--bs-border-radius-lg);
4677
- box-shadow: var(--bs-box-shadow-sm);
4678
- }
4679
- .sidebar-wrapper--contained .sidebar[data-variant="floating"] .sidebar-inner {
4680
- height: calc(100% - 1rem);
4681
- max-height: calc(100% - 1rem);
4682
- }
4683
- .sidebar-wrapper[data-moo-sidebar-state="collapsed"] .sidebar[data-variant="floating"][data-collapsible="icon"] {
4684
- flex-basis: calc(var(--moo-sidebar-width-icon) + 1rem);
4685
- width: calc(var(--moo-sidebar-width-icon) + 1rem);
4686
- }
4687
- .sidebar-wrapper[data-moo-sidebar-state="collapsed"] .sidebar[data-variant="floating"][data-collapsible="icon"] .sidebar-inner {
4688
- box-shadow: var(--bs-box-shadow);
4689
- }
4690
- }
4781
+
4782
+ /* Sidebar */
4691
4783
  .sidebar-inner {
4692
4784
  position: sticky;
4693
4785
  top: 0;
@@ -4698,11 +4790,6 @@ label.btn {
4698
4790
  max-height: 100svh;
4699
4791
  background: var(--moo-sidebar);
4700
4792
  }
4701
- .sidebar-wrapper--contained .sidebar-inner {
4702
- position: relative;
4703
- height: 100%;
4704
- max-height: 100%;
4705
- }
4706
4793
  .sidebar-header,
4707
4794
  .sidebar-footer {
4708
4795
  display: flex;
@@ -4829,6 +4916,10 @@ label.btn {
4829
4916
  font-weight: 500;
4830
4917
  background: var(--moo-sidebar-accent);
4831
4918
  }
4919
+ .sidebar-content:has(.sidebar-menu:is(:hover, :focus-within)) .sidebar-menu-button[aria-current="page"]:not(:hover):not(:focus-visible),
4920
+ .sidebar-content:has(.sidebar-menu-button:not([aria-current="page"]):is(:hover, :focus-visible)) .sidebar-menu-button[aria-current="page"]:not(:hover):not(:focus-visible) {
4921
+ background: transparent;
4922
+ }
4832
4923
  .sidebar-menu-button--lg {
4833
4924
  height: 3rem;
4834
4925
  padding: 0.5rem;
@@ -4965,9 +5056,6 @@ label.btn {
4965
5056
  border: var(--bs-border-width) solid var(--moo-sidebar-border);
4966
5057
  background: var(--moo-sidebar-accent);
4967
5058
  }
4968
- .sidebar-avatar {
4969
- border-radius: var(--bs-border-radius);
4970
- }
4971
5059
  .sidebar-footer .sidebar-account-menu {
4972
5060
  width: auto;
4973
5061
  min-width: var(--moo-dropdown-sidebar-min-width);
@@ -5008,109 +5096,28 @@ label.btn {
5008
5096
  text-overflow: ellipsis;
5009
5097
  white-space: nowrap;
5010
5098
  }
5011
- .sidebar-inset {
5012
- display: flex;
5013
- flex: 1 1 auto;
5014
- flex-direction: column;
5015
- min-width: 0;
5016
- background: var(--bs-body-bg);
5017
- }
5018
- .sidebar-inset__header {
5019
- position: sticky;
5020
- top: 0;
5021
- z-index: 20;
5022
- display: flex;
5023
- align-items: center;
5024
- gap: 0.5rem;
5025
- height: 4rem;
5026
- padding-inline: 1rem;
5027
- border-bottom: var(--bs-border-width) solid var(--bs-border-color);
5028
- background: var(--bs-body-bg);
5029
- }
5030
- .sidebar-inset__content {
5031
- flex: 1 1 auto;
5032
- min-width: 0;
5033
- }
5034
- @media (min-width: 992px) {
5035
- .sidebar-wrapper:has(.sidebar[data-variant="inset"]) {
5036
- background: var(--moo-sidebar);
5037
- }
5038
- .sidebar-wrapper:has(.sidebar[data-variant="inset"]) .sidebar-inset {
5039
- margin: 0.5rem;
5040
- margin-inline-start: 0;
5041
- border-radius: var(--bs-border-radius-xl);
5042
- box-shadow: var(--bs-box-shadow-sm);
5043
- }
5044
- .sidebar-wrapper[data-moo-sidebar-state="collapsed"]:has(.sidebar[data-variant="inset"]) .sidebar-inset {
5045
- margin-inline-start: 0.5rem;
5046
- }
5047
- .sidebar-wrapper:has(.sidebar[data-variant="inset"][data-side="right"]) .sidebar-inset {
5048
- margin-inline-start: 0.5rem;
5049
- margin-inline-end: 0;
5050
- }
5051
- .sidebar-wrapper[data-moo-sidebar-state="collapsed"]:has(.sidebar[data-variant="inset"][data-side="right"]) .sidebar-inset {
5052
- margin-inline-end: 0.5rem;
5053
- }
5054
- }
5055
- .sidebar-rail {
5056
- position: absolute;
5057
- inset-block: 0;
5058
- inset-inline-end: 0;
5059
- z-index: 20;
5060
- width: 1rem;
5061
- padding: 0;
5062
- transform: translateX(50%);
5063
- border: 0;
5064
- background: transparent;
5065
- cursor: pointer;
5066
- }
5067
- [dir="rtl"] .sidebar-rail {
5068
- transform: translateX(-50%);
5069
- }
5070
- .sidebar-rail::after {
5071
- content: "";
5072
- position: absolute;
5073
- inset-block: 0;
5074
- inset-inline-start: 50%;
5075
- width: var(--bs-border-width);
5076
- background: transparent;
5077
- transition: background 0.15s ease;
5078
- }
5079
- .sidebar-rail:hover::after {
5080
- background: var(--moo-sidebar-border);
5081
- }
5082
5099
  @media (min-width: 992px) {
5083
- .sidebar {
5084
- position: relative;
5085
- }
5086
- .sidebar-wrapper[data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] {
5087
- flex-basis: var(--moo-sidebar-width-icon);
5088
- width: var(--moo-sidebar-width-icon);
5089
- }
5090
- .sidebar-wrapper[data-moo-sidebar-state="collapsed"] .sidebar-inset {
5091
- position: relative;
5092
- z-index: 0;
5093
- }
5094
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-group-label,
5095
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button__text,
5096
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button__subtitle,
5097
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button__end {
5100
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-group-label,
5101
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button__text,
5102
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button__subtitle,
5103
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button__end {
5098
5104
  display: none;
5099
5105
  }
5100
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-sub,
5101
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-action,
5102
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-group-action,
5103
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-badge {
5106
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-sub,
5107
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-action,
5108
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-group-action,
5109
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-badge {
5104
5110
  display: none !important;
5105
5111
  }
5106
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"]:has(.sidebar-menu-button[data-bs-toggle="dropdown"][aria-expanded="true"]) {
5107
- z-index: 1000;
5112
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"]:has(.sidebar-menu-button[data-bs-toggle="dropdown"][aria-expanded="true"]) {
5113
+ z-index: 1031;
5108
5114
  }
5109
5115
  .sidebar-menu-flyout {
5110
5116
  position: fixed;
5111
5117
  z-index: 1000;
5112
5118
  inset-block-start: var(--moo-sidebar-flyout-block-start);
5113
- inset-inline-start: var(--moo-sidebar-flyout-inline-start);
5119
+ left: var(--moo-sidebar-flyout-left);
5120
+ right: auto;
5114
5121
  display: flex;
5115
5122
  flex-direction: column;
5116
5123
  min-width: 10rem;
@@ -5137,87 +5144,95 @@ label.btn {
5137
5144
  .sidebar-menu-flyout .sidebar-menu-badge {
5138
5145
  display: flex !important;
5139
5146
  }
5140
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button {
5147
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button {
5141
5148
  justify-content: center;
5142
5149
  padding-inline: 0;
5143
5150
  }
5144
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button--workspace:hover {
5151
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button--workspace:hover {
5145
5152
  background: transparent;
5146
5153
  }
5147
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button--workspace[aria-expanded="true"] {
5154
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button--workspace[aria-expanded="true"] {
5148
5155
  background: transparent;
5149
5156
  outline: 0;
5150
5157
  box-shadow: none;
5151
5158
  }
5152
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button--workspace:focus-visible {
5159
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button--workspace:focus-visible {
5153
5160
  background: transparent;
5154
5161
  outline: 0;
5155
5162
  box-shadow: none;
5156
5163
  }
5157
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-item--account > .sidebar-menu-button--account {
5164
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-item--account > .sidebar-menu-button--account {
5158
5165
  padding: 0;
5159
5166
  overflow: visible;
5160
5167
  }
5161
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-item--account > .sidebar-menu-button--account:hover {
5168
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-item--account > .sidebar-menu-button--account:hover {
5162
5169
  background: transparent;
5163
5170
  }
5164
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-item--account > .sidebar-menu-button--account[aria-expanded="true"] {
5171
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-item--account > .sidebar-menu-button--account[aria-expanded="true"] {
5165
5172
  background: transparent;
5166
5173
  outline: 0;
5167
5174
  box-shadow: none;
5168
5175
  }
5169
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-item--account > .sidebar-menu-button--account:focus-visible {
5176
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-item--account > .sidebar-menu-button--account:focus-visible {
5170
5177
  background: transparent;
5171
5178
  outline: 0;
5172
5179
  box-shadow: none;
5173
5180
  }
5174
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button--lg {
5181
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-button--lg {
5175
5182
  height: 2rem;
5176
5183
  padding: 0;
5177
5184
  }
5178
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-skeleton {
5185
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-skeleton {
5179
5186
  justify-content: center;
5180
5187
  }
5181
- [data-moo-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-skeleton__line {
5182
- display: none;
5183
- }
5184
- }
5185
- @media (max-width: 991.98px) {
5186
- .sidebar-rail {
5188
+ [data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] .sidebar-menu-skeleton__line {
5187
5189
  display: none;
5188
5190
  }
5189
- .sidebar-wrapper--contained {
5190
- flex-direction: column;
5191
- height: auto;
5192
- min-height: 34rem;
5193
- overflow: visible;
5194
- }
5195
- .sidebar-wrapper--contained .sidebar {
5196
- position: relative;
5197
- inset: auto;
5198
- flex: 0 0 auto;
5199
- width: 100%;
5200
- height: auto;
5201
- visibility: visible;
5202
- transform: none;
5203
- }
5204
- .sidebar-wrapper--contained .sidebar-inner {
5205
- height: auto;
5206
- max-height: none;
5207
- }
5208
5191
  }
5192
+
5193
+ /* Alert */
5209
5194
  .alert {
5210
5195
  --bs-alert-border-color: var(--moo-border);
5211
5196
  --bs-alert-color: var(--moo-foreground);
5197
+ --bs-alert-padding-x: 0.625rem;
5198
+ --bs-alert-padding-y: 0.5rem;
5212
5199
  display: flex;
5213
5200
  align-items: flex-start;
5214
- gap: 0.75rem;
5201
+ gap: 0.375rem;
5202
+ }
5203
+ .alert-dismissible {
5204
+ padding-right: 0;
5205
+ padding-left: 0;
5206
+ padding-inline-start: var(--bs-alert-padding-x);
5207
+ padding-inline-end: calc(var(--bs-alert-padding-x) + 1.9375rem);
5208
+ }
5209
+ .alert-dismissible .btn-close {
5210
+ top: auto;
5211
+ right: auto;
5212
+ inset-block-start: var(--bs-alert-padding-y);
5213
+ inset-inline-end: var(--bs-alert-padding-x);
5214
+ padding: 0.34375rem 0.34375rem;
5215
5215
  }
5216
5216
  .alert-danger {
5217
5217
  --bs-alert-bg: transparent;
5218
5218
  --bs-alert-border-color: var(--moo-border);
5219
5219
  --bs-alert-color: var(--moo-destructive);
5220
5220
  }
5221
+ .alert-warning {
5222
+ --bs-alert-bg: var(--moo-warning-surface);
5223
+ --bs-alert-border-color: var(--moo-border);
5224
+ --bs-alert-color: var(--moo-warning);
5225
+ }
5226
+ .alert-success {
5227
+ --bs-alert-bg: var(--moo-success-surface);
5228
+ --bs-alert-border-color: var(--moo-border);
5229
+ --bs-alert-color: var(--moo-success);
5230
+ }
5231
+ .alert-info {
5232
+ --bs-alert-bg: var(--moo-info-surface);
5233
+ --bs-alert-border-color: var(--moo-border);
5234
+ --bs-alert-color: var(--moo-info);
5235
+ }
5221
5236
  .alert-icon {
5222
5237
  display: flex;
5223
5238
  flex: 0 0 auto;
@@ -5231,6 +5246,9 @@ label.btn {
5231
5246
  flex: 1 1 auto;
5232
5247
  min-width: 0;
5233
5248
  }
5249
+ .alert-body p {
5250
+ color: color-mix(in srgb, var(--bs-alert-color) 60%, var(--bs-secondary-color));
5251
+ }
5234
5252
  .alert-heading {
5235
5253
  margin-bottom: 0.25rem;
5236
5254
  font-size: 0.875rem;
@@ -5239,20 +5257,59 @@ label.btn {
5239
5257
  .alert-action {
5240
5258
  flex: 0 0 auto;
5241
5259
  }
5260
+
5261
+ /* Breadcrumb */
5242
5262
  .breadcrumb {
5243
5263
  --bs-breadcrumb-item-active-color: var(--moo-foreground);
5264
+ --bs-breadcrumb-item-padding-x: 0.375rem;
5265
+ column-gap: var(--bs-breadcrumb-item-padding-x);
5266
+ line-height: 1.25rem;
5267
+ }
5268
+ .breadcrumb-item {
5269
+ display: inline-flex;
5270
+ align-items: center;
5271
+ }
5272
+ .breadcrumb-item + .breadcrumb-item::before {
5273
+ float: none;
5274
+ flex: 0 0 auto;
5275
+ }
5276
+ .breadcrumb-item + .breadcrumb-item {
5277
+ padding-left: 0;
5278
+ }
5279
+ .breadcrumb:not(.breadcrumb--custom-divider) .breadcrumb-item + .breadcrumb-item::before {
5280
+ width: 0.875rem;
5281
+ height: 0.875rem;
5282
+ padding-right: 0;
5283
+ margin-inline-end: var(--bs-breadcrumb-item-padding-x);
5284
+ background-color: var(--moo-muted-foreground);
5285
+ content: "";
5286
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E") center/100% 100% no-repeat;
5287
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E") center/100% 100% no-repeat;
5288
+ }
5289
+ .breadcrumb--custom-divider .breadcrumb-item + .breadcrumb-item::before {
5290
+ display: inline-flex;
5291
+ align-items: center;
5292
+ justify-content: center;
5293
+ width: 0.875rem;
5294
+ height: 0.875rem;
5295
+ padding-right: 0;
5296
+ margin-inline-end: var(--bs-breadcrumb-item-padding-x);
5297
+ line-height: 1;
5244
5298
  }
5245
5299
  :dir(rtl) .breadcrumb {
5246
5300
  --bs-breadcrumb-divider: "<";
5247
5301
  }
5248
5302
  :dir(rtl) .breadcrumb-item + .breadcrumb-item {
5249
- padding-right: var(--bs-breadcrumb-item-padding-x);
5303
+ padding-right: 0;
5250
5304
  padding-left: 0;
5251
5305
  }
5252
5306
  :dir(rtl) .breadcrumb-item + .breadcrumb-item::before {
5253
- float: right;
5254
5307
  padding-right: 0;
5255
- padding-left: var(--bs-breadcrumb-item-padding-x);
5308
+ padding-left: 0;
5309
+ }
5310
+ :dir(rtl) .breadcrumb:not(.breadcrumb--custom-divider) .breadcrumb-item + .breadcrumb-item::before {
5311
+ padding-left: 0;
5312
+ transform: scaleX(-1);
5256
5313
  }
5257
5314
  .breadcrumb-item a {
5258
5315
  color: var(--moo-muted-foreground);
@@ -5272,39 +5329,300 @@ label.btn {
5272
5329
  width: 1rem;
5273
5330
  height: 1rem;
5274
5331
  }
5275
- .breadcrumb-dropdown-item {
5332
+ .breadcrumb-dropdown-item,
5333
+ .breadcrumb-dropdown-item .dropdown {
5276
5334
  display: inline-flex;
5277
5335
  align-items: center;
5278
5336
  }
5279
- .breadcrumb-dropdown-item button {
5337
+ .breadcrumb-dropdown-trigger {
5338
+ display: inline-flex;
5339
+ align-items: center;
5340
+ gap: 0.25rem;
5280
5341
  padding: 0;
5281
5342
  border: 0;
5282
5343
  background-color: transparent;
5283
5344
  color: var(--moo-muted-foreground);
5345
+ font: inherit;
5346
+ line-height: 1.25rem;
5284
5347
  text-decoration: none;
5285
5348
  }
5286
- .breadcrumb-dropdown-item button:hover,
5287
- .breadcrumb-dropdown-item button:focus {
5349
+ .breadcrumb-dropdown-trigger:hover,
5350
+ .breadcrumb-dropdown-trigger:focus {
5288
5351
  color: var(--moo-foreground);
5289
5352
  }
5353
+ .breadcrumb .breadcrumb-dropdown-trigger:focus-visible {
5354
+ outline: 0;
5355
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
5356
+ }
5357
+ .breadcrumb-dropdown-trigger > [data-icon] {
5358
+ width: 0.875rem;
5359
+ height: 0.875rem;
5360
+ }
5361
+
5362
+ /* Pagination */
5290
5363
  .page-link {
5291
5364
  display: inline-flex;
5292
5365
  align-items: center;
5293
5366
  justify-content: center;
5294
- gap: 0.25rem;
5295
- min-width: calc( 1em * var(--bs-body-line-height, 1.5) + var(--bs-pagination-padding-y) * 2 + var(--bs-pagination-border-width) * 2);
5296
- min-height: calc( 1em * var(--bs-body-line-height, 1.5) + var(--bs-pagination-padding-y) * 2 + var(--bs-pagination-border-width) * 2);
5367
+ flex-shrink: 0;
5368
+ gap: 0.375rem;
5369
+ min-width: calc( 1.25rem + 0.625rem + var(--bs-pagination-border-width) * 2);
5370
+ min-height: calc( 1.25rem + 0.625rem + var(--bs-pagination-border-width) * 2);
5371
+ line-height: 1.25rem;
5372
+ font-weight: 500;
5373
+ white-space: nowrap;
5374
+ user-select: none;
5375
+ }
5376
+ .page-link[aria-label]:has(> span:not(.visually-hidden):not(.d-none)):has([data-icon="inline-start"]) {
5377
+ padding-inline-start: 0.375rem;
5378
+ padding-inline-end: 0.625rem;
5379
+ }
5380
+ .page-link[aria-label]:has(> span:not(.visually-hidden):not(.d-none)):has([data-icon="inline-end"]) {
5381
+ padding-inline-start: 0.625rem;
5382
+ padding-inline-end: 0.375rem;
5383
+ }
5384
+ @media (min-width: 576px) {
5385
+ .page-link[aria-label]:has(> .d-sm-inline):has([data-icon="inline-start"]) {
5386
+ padding-inline-start: 0.375rem;
5387
+ padding-inline-end: 0.625rem;
5388
+ }
5389
+ .page-link[aria-label]:has(> .d-sm-inline):has([data-icon="inline-end"]) {
5390
+ padding-inline-start: 0.625rem;
5391
+ padding-inline-end: 0.375rem;
5392
+ }
5393
+ }
5394
+ .page-link:has([data-icon]):not(:has(> span:not(.visually-hidden))) {
5395
+ padding-inline: 0;
5297
5396
  }
5298
5397
  .page-link [data-icon] {
5299
5398
  width: 1rem;
5300
5399
  height: 1rem;
5400
+ flex: 0 0 auto;
5401
+ }
5402
+ .page-item:not(.disabled) .page-link:active {
5403
+ transform: translateY(0.5px);
5301
5404
  }
5302
5405
  .page-item.disabled {
5303
5406
  opacity: var(--moo-disabled-control-opacity);
5304
5407
  }
5408
+
5409
+ /* Badge */
5410
+ .badge {
5411
+ display: inline-flex;
5412
+ height: 1.25rem;
5413
+ align-items: center;
5414
+ justify-content: center;
5415
+ border: var(--bs-border-width) solid var(--bs-border-color);
5416
+ border-color: transparent;
5417
+ gap: 0.25rem;
5418
+ line-height: 1rem;
5419
+ }
5420
+ .badge[class~="border"] {
5421
+ border-color: var(--moo-border) !important;
5422
+ }
5423
+ .badge[class~="text-bg-primary"] {
5424
+ color: var(--moo-primary-foreground) !important;
5425
+ background-color: var(--moo-primary) !important;
5426
+ }
5427
+ .badge[class~="text-bg-secondary"] {
5428
+ color: var(--moo-foreground) !important;
5429
+ background-color: var(--moo-muted-surface) !important;
5430
+ }
5431
+ .badge[class~="text-bg-danger"] {
5432
+ color: var(--moo-destructive) !important;
5433
+ background-color: var(--moo-destructive-surface) !important;
5434
+ }
5435
+ .badge[class~="text-body-secondary"] {
5436
+ color: var(--moo-foreground) !important;
5437
+ }
5438
+
5439
+ /* Progress */
5305
5440
  .progress {
5306
- --bs-progress-bar-bg: var(--moo-foreground);
5441
+ --bs-progress-bar-color: var(--moo-primary-foreground);
5442
+ --bs-progress-bar-bg: var(--moo-primary);
5443
+ }
5444
+
5445
+ /* Slider */
5446
+ .slider {
5447
+ display: grid;
5448
+ gap: 0.5rem;
5449
+ width: 100%;
5450
+ }
5451
+ .slider-track {
5452
+ position: relative;
5453
+ display: flex;
5454
+ align-items: center;
5455
+ width: 100%;
5456
+ height: 0.75rem;
5457
+ cursor: pointer;
5458
+ touch-action: none;
5459
+ }
5460
+ .slider-track::before,
5461
+ .slider-range {
5462
+ position: absolute;
5463
+ inset-block-start: 50%;
5464
+ height: 0.25rem;
5465
+ border-radius: var(--bs-border-radius-pill);
5466
+ transform: translateY(-50%);
5467
+ pointer-events: none;
5468
+ }
5469
+ .slider-track::before {
5470
+ content: "";
5471
+ inset-inline: 0;
5472
+ background-color: var(--bs-secondary-bg);
5473
+ box-shadow: var(--bs-box-shadow-inset);
5474
+ }
5475
+ .slider-range {
5476
+ inset-inline-start: var(--moo-slider-start, 0%);
5477
+ inset-inline-end: calc(100% - var(--moo-slider-end, 0%));
5478
+ background-color: var(--moo-primary);
5479
+ }
5480
+ .slider-input {
5481
+ position: absolute;
5482
+ inset: 0;
5483
+ margin: 0;
5484
+ width: 100%;
5485
+ height: 100%;
5486
+ pointer-events: none;
5487
+ }
5488
+ .slider-input::-webkit-slider-runnable-track {
5489
+ height: 0.25rem;
5490
+ background-color: transparent;
5491
+ box-shadow: none;
5492
+ }
5493
+ .slider-input::-moz-range-track {
5494
+ height: 0.25rem;
5495
+ background-color: transparent;
5496
+ box-shadow: none;
5497
+ }
5498
+ .slider-input::-webkit-slider-thumb {
5499
+ position: relative;
5500
+ z-index: 1;
5501
+ width: 0.75rem;
5502
+ height: 0.75rem;
5503
+ margin-top: -0.25rem;
5504
+ background-color: var(--bs-body-bg);
5505
+ border-width: var(--bs-border-width);
5506
+ border-style: solid;
5507
+ border-color: var(--moo-primary);
5508
+ box-shadow: var(--bs-box-shadow-sm);
5509
+ pointer-events: auto;
5510
+ }
5511
+ .slider-input::-moz-range-thumb {
5512
+ position: relative;
5513
+ z-index: 1;
5514
+ width: 0.75rem;
5515
+ height: 0.75rem;
5516
+ background-color: var(--bs-body-bg);
5517
+ border-width: var(--bs-border-width);
5518
+ border-style: solid;
5519
+ border-color: var(--moo-primary);
5520
+ box-shadow: var(--bs-box-shadow-sm);
5521
+ pointer-events: auto;
5522
+ }
5523
+ .slider-input::-webkit-slider-thumb:active {
5524
+ background-color: var(--bs-body-bg);
5525
+ border-color: var(--moo-primary);
5526
+ }
5527
+ .slider-input::-moz-range-thumb:active {
5528
+ background-color: var(--bs-body-bg);
5529
+ border-color: var(--moo-primary);
5530
+ }
5531
+ .slider-input:focus-visible::-webkit-slider-thumb {
5532
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
5533
+ }
5534
+ .slider-input:focus-visible::-moz-range-thumb {
5535
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
5536
+ }
5537
+ .slider[data-slider-dragging] .slider-input::-webkit-slider-thumb {
5538
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
5539
+ }
5540
+ .slider[data-slider-dragging] .slider-input::-moz-range-thumb {
5541
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
5542
+ }
5543
+ .slider[data-slider-pointer-focus]:not([data-slider-dragging]) .slider-input:focus::-webkit-slider-thumb {
5544
+ box-shadow: var(--bs-box-shadow-sm);
5545
+ }
5546
+ .slider[data-slider-pointer-focus]:not([data-slider-dragging]) .slider-input:focus::-moz-range-thumb {
5547
+ box-shadow: var(--bs-box-shadow-sm);
5548
+ }
5549
+ .slider-input:disabled {
5550
+ opacity: 1;
5551
+ }
5552
+ .slider-input:disabled::-webkit-slider-thumb {
5553
+ background-color: var(--moo-muted-surface);
5554
+ border-color: var(--moo-disabled-foreground);
5555
+ box-shadow: none;
5556
+ cursor: default;
5557
+ }
5558
+ .slider-input:disabled::-moz-range-thumb {
5559
+ background-color: var(--moo-muted-surface);
5560
+ border-color: var(--moo-disabled-foreground);
5561
+ box-shadow: none;
5562
+ cursor: default;
5563
+ }
5564
+ .slider-input:disabled:focus-visible::-webkit-slider-thumb,
5565
+ .slider[data-slider-dragging] .slider-input:disabled::-webkit-slider-thumb,
5566
+ .slider[data-slider-pointer-focus] .slider-input:disabled:focus-visible::-webkit-slider-thumb {
5567
+ background-color: var(--moo-muted-surface);
5568
+ border-color: var(--moo-disabled-foreground);
5569
+ box-shadow: none;
5570
+ }
5571
+ .slider-input:disabled:focus-visible::-moz-range-thumb,
5572
+ .slider[data-slider-dragging] .slider-input:disabled::-moz-range-thumb,
5573
+ .slider[data-slider-pointer-focus] .slider-input:disabled:focus-visible::-moz-range-thumb {
5574
+ background-color: var(--moo-muted-surface);
5575
+ border-color: var(--moo-disabled-foreground);
5576
+ box-shadow: none;
5577
+ }
5578
+ .slider:has(.slider-input:disabled) .slider-track {
5579
+ cursor: default;
5580
+ }
5581
+ .slider:has(.slider-input:disabled) .slider-range {
5582
+ background-color: var(--moo-disabled-foreground);
5583
+ }
5584
+ .slider--range .slider-input--upper {
5585
+ z-index: 2;
5586
+ }
5587
+ .slider--vertical {
5588
+ width: max-content;
5589
+ }
5590
+ .slider--vertical [data-slider-output] {
5591
+ display: inline-block;
5592
+ min-width: 3ch;
5593
+ text-align: end;
5594
+ font-variant-numeric: tabular-nums;
5595
+ }
5596
+ .slider--vertical .slider-track {
5597
+ justify-content: center;
5598
+ justify-self: center;
5599
+ width: 0.75rem;
5600
+ height: 8rem;
5601
+ }
5602
+ .slider--vertical .slider-track::before {
5603
+ inset-block: 0;
5604
+ inset-inline: auto;
5605
+ width: 0.25rem;
5606
+ height: auto;
5607
+ transform: none;
5608
+ }
5609
+ .slider--vertical .slider-range {
5610
+ inset-block-start: calc(100% - var(--moo-slider-end, 0%));
5611
+ inset-block-end: var(--moo-slider-start, 0%);
5612
+ inset-inline-start: 50%;
5613
+ inset-inline-end: auto;
5614
+ width: 0.25rem;
5615
+ height: auto;
5616
+ transform: translateX(-50%);
5617
+ }
5618
+ .slider--vertical .slider-input {
5619
+ width: 100%;
5620
+ height: 100%;
5621
+ writing-mode: vertical-lr;
5622
+ direction: rtl;
5307
5623
  }
5624
+
5625
+ /* Separator */
5308
5626
  hr {
5309
5627
  opacity: 1;
5310
5628
  border-top: var(--bs-border-width) solid var(--moo-border);
@@ -5313,32 +5631,190 @@ label.btn {
5313
5631
  opacity: 1;
5314
5632
  background-color: var(--moo-border);
5315
5633
  }
5316
- [data-bs-theme="dark"] .form-check-input:checked {
5317
- filter: invert(1);
5634
+
5635
+ /* Checkbox */
5636
+ .form-check-input {
5637
+ margin-top: 0.125rem;
5638
+ }
5639
+ .form-check-input[type="checkbox"]:checked:not([role="switch"]) {
5640
+ --bs-form-check-bg-image: none;
5641
+ position: relative;
5642
+ overflow: hidden;
5643
+ }
5644
+ .form-check-input[type="checkbox"]:checked:not([role="switch"])::after {
5645
+ position: absolute;
5646
+ top: 45%;
5647
+ left: 50%;
5648
+ width: 0.32em;
5649
+ height: 0.58em;
5650
+ border-color: var(--moo-primary-foreground);
5651
+ border-style: solid;
5652
+ border-width: 0 0.14em 0.14em 0;
5653
+ content: "";
5654
+ transform: translate(-50%, -55%) rotate(45deg);
5655
+ transform-origin: center;
5656
+ }
5657
+ .form-check-input[type="checkbox"]:indeterminate:not([role="switch"]) {
5658
+ --bs-form-check-bg-image: linear-gradient(var(--moo-primary-foreground), var(--moo-primary-foreground));
5659
+ background-size: 62% 14%;
5660
+ background-position: center;
5661
+ }
5662
+ .form-check-input[type="radio"]:checked {
5663
+ --bs-form-check-bg-image: radial-gradient(circle at center, var(--moo-primary-foreground) 0 34%, transparent 36%);
5318
5664
  }
5319
- .form-check-input[type="checkbox"]:focus:active,
5320
- .form-check-input[type="checkbox"]:focus:not(:focus-visible) {
5665
+ .form-check-input:is([type="checkbox"], [type="radio"]):not(.is-invalid):focus:active,
5666
+ .form-check-input:is([type="checkbox"], [type="radio"]):not(.is-invalid):focus:not(:focus-visible) {
5321
5667
  border-color: var(--bs-border-color);
5322
5668
  box-shadow: none;
5323
5669
  }
5324
- .form-check-input[type="checkbox"]:checked:focus:active,
5325
- .form-check-input[type="checkbox"]:checked:focus:not(:focus-visible) {
5326
- border-color: #171717;
5670
+ .form-check-input:is([type="checkbox"], [type="radio"]):checked:not(.is-invalid):focus:active,
5671
+ .form-check-input:is([type="checkbox"], [type="radio"]):checked:not(.is-invalid):focus:not(:focus-visible) {
5672
+ border-color: var(--moo-primary);
5673
+ }
5674
+ .form-check-input[type="checkbox"]:not(.is-invalid):indeterminate:focus:active,
5675
+ .form-check-input[type="checkbox"]:not(.is-invalid):indeterminate:focus:not(:focus-visible) {
5676
+ border-color: var(--moo-primary);
5677
+ }
5678
+ .form-check-input.is-invalid {
5679
+ box-shadow: 0 0 0 3px var(--moo-form-invalid-ring-color);
5327
5680
  }
5328
- .form-check-input[type="checkbox"]:indeterminate:focus:active,
5329
- .form-check-input[type="checkbox"]:indeterminate:focus:not(:focus-visible) {
5330
- border-color: #171717;
5681
+ .form-check-input.is-invalid:focus:active,
5682
+ .form-check-input.is-invalid:focus:not(:focus-visible) {
5683
+ box-shadow: 0 0 0 3px var(--moo-form-invalid-ring-color);
5331
5684
  }
5685
+ .form-check-input:is([type="checkbox"], [type="radio"]).is-invalid:checked:focus:active,
5686
+ .form-check-input:is([type="checkbox"], [type="radio"]).is-invalid:checked:focus:not(:focus-visible) {
5687
+ box-shadow: 0 0 0 3px var(--moo-form-invalid-ring-color);
5688
+ }
5689
+ .form-check-input[type="checkbox"].is-invalid:indeterminate:focus:active,
5690
+ .form-check-input[type="checkbox"].is-invalid:indeterminate:focus:not(:focus-visible) {
5691
+ box-shadow: 0 0 0 3px var(--moo-form-invalid-ring-color);
5692
+ }
5693
+ .form-check-input:is([type="checkbox"], [type="radio"]):not([role="switch"]).is-invalid:checked,
5694
+ .form-check-input:is([type="checkbox"], [type="radio"]):not([role="switch"]).is-invalid:checked:focus:active,
5695
+ .form-check-input:is([type="checkbox"], [type="radio"]):not([role="switch"]).is-invalid:checked:focus:not(:focus-visible) {
5696
+ border-color: var(--moo-primary);
5697
+ background-color: var(--moo-primary);
5698
+ }
5699
+
5700
+ /* Radio Group */
5332
5701
  .radio-group legend.form-label {
5333
5702
  font-size: inherit;
5334
5703
  }
5704
+ .form-check-card {
5705
+ position: relative;
5706
+ padding: 0;
5707
+ margin-bottom: 0;
5708
+ }
5709
+ .form-check-card + .form-check-card {
5710
+ margin-block-start: 0.5rem;
5711
+ }
5712
+ .form-check-card > .form-check-input:not(.visually-hidden) {
5713
+ position: absolute;
5714
+ inset-block-start: 0.75rem;
5715
+ inset-inline-end: 0.75rem;
5716
+ float: none;
5717
+ margin: 0;
5718
+ }
5719
+ .form-check-card > .form-check-label {
5720
+ display: flex;
5721
+ align-items: center;
5722
+ gap: 0.75rem;
5723
+ padding: 0.75rem;
5724
+ padding-inline-end: 2.5rem;
5725
+ border: var(--bs-border-width) solid var(--moo-border);
5726
+ border-radius: var(--bs-border-radius);
5727
+ color: var(--moo-foreground);
5728
+ cursor: pointer;
5729
+ }
5730
+ .form-check-card.form-check-card--no-control > .form-check-label {
5731
+ padding-inline-end: 0.75rem;
5732
+ }
5733
+ .form-check-card > .form-check-input:not(:disabled) ~ .form-check-label:hover,
5734
+ .form-check-card > .form-check-input:checked ~ .form-check-label {
5735
+ background-color: var(--moo-muted-surface);
5736
+ }
5737
+ .form-check-card > .form-check-input:checked ~ .form-check-label {
5738
+ border-color: var(--moo-foreground);
5739
+ }
5740
+ .form-check-card > .form-check-input:checked ~ .form-check-label .form-check-card-media {
5741
+ border-color: var(--moo-primary);
5742
+ background-color: var(--moo-primary);
5743
+ color: var(--moo-primary-foreground);
5744
+ }
5745
+ .form-check-card > .form-check-input:focus-visible ~ .form-check-label {
5746
+ border-color: var(--moo-ring);
5747
+ box-shadow: 0 0 0 var(--bs-focus-ring-width) color-mix(in srgb, var(--moo-ring) 50%, transparent);
5748
+ }
5749
+ .form-check-card > .form-check-input.is-invalid ~ .form-check-label {
5750
+ border-color: var(--bs-form-invalid-border-color);
5751
+ }
5752
+ .form-check-card > .form-check-input.is-invalid:focus-visible ~ .form-check-label {
5753
+ box-shadow: 0 0 0 var(--bs-focus-ring-width) var(--moo-form-invalid-ring-color);
5754
+ }
5755
+ .form-check-card-content {
5756
+ display: flex;
5757
+ flex-direction: column;
5758
+ gap: 0.25rem;
5759
+ min-width: 0;
5760
+ line-height: 1.25;
5761
+ overflow-wrap: anywhere;
5762
+ }
5763
+ .form-check-card-content > .form-text {
5764
+ margin: 0;
5765
+ font-size: 0.76562rem;
5766
+ line-height: inherit;
5767
+ color: color-mix(in srgb, var(--moo-muted-foreground) 95%, var(--moo-foreground));
5768
+ }
5769
+ .form-check-card-title {
5770
+ font-weight: 500;
5771
+ }
5772
+ .form-check-card-media {
5773
+ display: grid;
5774
+ place-items: center;
5775
+ flex: 0 0 auto;
5776
+ inline-size: 2.30078rem;
5777
+ aspect-ratio: 1;
5778
+ border: var(--bs-border-width) solid var(--moo-border);
5779
+ border-radius: var(--bs-border-radius-sm);
5780
+ background-color: var(--moo-muted-surface);
5781
+ color: var(--moo-foreground);
5782
+ }
5783
+ .form-check-card-media > span {
5784
+ font-size: 0.76562rem;
5785
+ font-weight: 600;
5786
+ }
5787
+ .form-check-card-media > [data-icon] {
5788
+ width: 0.875rem;
5789
+ height: 0.875rem;
5790
+ }
5791
+
5792
+ /* Switch */
5335
5793
  .form-switch .form-check-input {
5336
5794
  height: 1.15rem;
5337
5795
  }
5338
- .form-switch .form-check-input:focus:active:not(:checked),
5339
- .form-switch .form-check-input:focus:not(:focus-visible):not(:checked) {
5796
+ :scope[data-bs-theme="light"] .form-switch .form-check-input:checked {
5797
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
5798
+ background-color: var(--moo-primary);
5799
+ border-color: var(--moo-primary);
5800
+ filter: none;
5801
+ }
5802
+ :scope[data-bs-theme="dark"] .form-switch .form-check-input:checked {
5803
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2318181b'/%3e%3c/svg%3e");
5804
+ background-color: var(--moo-primary);
5805
+ border-color: var(--moo-primary);
5806
+ filter: none;
5807
+ }
5808
+ :scope[data-bs-theme="light"] .form-switch .form-check-input:focus:active:not(:checked),
5809
+ :scope[data-bs-theme="light"] .form-switch .form-check-input:focus:not(:focus-visible):not(:checked) {
5340
5810
  --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%2810, 10, 10, 0.25%29'/%3e%3c/svg%3e");
5341
5811
  }
5812
+ :scope[data-bs-theme="dark"] .form-switch .form-check-input:focus:active:not(:checked),
5813
+ :scope[data-bs-theme="dark"] .form-switch .form-check-input:focus:not(:focus-visible):not(:checked) {
5814
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
5815
+ }
5816
+
5817
+ /* Spinner */
5342
5818
  .spinner [data-icon] {
5343
5819
  width: 1rem;
5344
5820
  height: 1rem;
@@ -5348,6 +5824,8 @@ label.btn {
5348
5824
  width: 0.75rem;
5349
5825
  height: 0.75rem;
5350
5826
  }
5827
+
5828
+ /* Accordion */
5351
5829
  .accordion-button::after {
5352
5830
  content: none;
5353
5831
  }
@@ -5389,6 +5867,11 @@ label.btn {
5389
5867
  .accordion-flush .accordion-button {
5390
5868
  font-weight: 500;
5391
5869
  }
5870
+ .card .accordion {
5871
+ --bs-accordion-bg: transparent;
5872
+ }
5873
+
5874
+ /* Tabs */
5392
5875
  .tabs-list {
5393
5876
  display: inline-flex;
5394
5877
  gap: 0.125rem;
@@ -5402,6 +5885,7 @@ label.btn {
5402
5885
  font-weight: 500;
5403
5886
  color: var(--bs-secondary-text-emphasis);
5404
5887
  border-radius: var(--bs-border-radius);
5888
+ cursor: default;
5405
5889
  transition: all 0.2s ease-in-out;
5406
5890
  }
5407
5891
  @media (prefers-reduced-motion: reduce) {
@@ -5412,43 +5896,87 @@ label.btn {
5412
5896
  .tabs-list .nav-link:hover {
5413
5897
  color: var(--moo-foreground);
5414
5898
  }
5899
+ .tabs-list .nav-link:not(.active, .disabled):hover {
5900
+ background-color: transparent;
5901
+ box-shadow: none;
5902
+ }
5903
+ .tabs-list .nav-link:focus:not(:focus-visible) {
5904
+ outline: 0;
5905
+ box-shadow: none;
5906
+ }
5415
5907
  .tabs-list .nav-link.active {
5416
5908
  color: var(--moo-foreground);
5417
5909
  background-color: var(--moo-surface);
5418
5910
  box-shadow: var(--bs-box-shadow-sm);
5419
5911
  }
5420
- .tabs-list .nav-link:disabled,
5421
- .tabs-list .nav-link.disabled {
5422
- color: var(--moo-disabled-foreground);
5423
- opacity: var(--moo-disabled-control-opacity);
5424
- pointer-events: none;
5912
+ .tabs-list .nav-link.active:focus-visible {
5913
+ border-color: var(--moo-ring);
5914
+ outline: 0;
5915
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
5425
5916
  }
5426
- .tab-content {
5427
- display: grid;
5428
- width: 100%;
5429
- max-width: 100%;
5430
- min-width: 0;
5431
- margin-top: 0.75rem;
5917
+ .tabs-list:has(.nav-link:hover) .nav-link.active:not(:hover) {
5918
+ background-color: var(--moo-surface);
5919
+ box-shadow: var(--bs-box-shadow-sm);
5432
5920
  }
5433
- .tab-content > .tab-pane {
5434
- grid-area: 1 / 1;
5435
- display: block;
5921
+ .tabs--vertical {
5922
+ display: flex;
5923
+ align-items: flex-start;
5924
+ gap: 1rem;
5925
+ width: 100%;
5926
+ max-width: 100%;
5927
+ }
5928
+ .tabs--vertical .tabs-list {
5929
+ flex: 0 0 auto;
5930
+ }
5931
+ .tabs--vertical .nav-link {
5932
+ justify-content: flex-start;
5933
+ text-align: start;
5934
+ }
5935
+ .tabs--vertical .tab-content {
5936
+ flex: 1 1 auto;
5937
+ min-width: 0;
5938
+ margin-top: 0;
5939
+ }
5940
+ @media (max-width: 575.98px) {
5941
+ .tabs--vertical {
5942
+ flex-direction: column;
5943
+ }
5944
+ .tabs--vertical .tabs-list {
5945
+ flex-direction: row !important;
5946
+ }
5947
+ }
5948
+ .tabs-list .nav-link:disabled,
5949
+ .tabs-list .nav-link.disabled {
5950
+ color: var(--moo-disabled-foreground);
5951
+ opacity: var(--moo-disabled-control-opacity);
5952
+ pointer-events: none;
5953
+ }
5954
+ .tab-content {
5955
+ display: grid;
5956
+ width: 100%;
5957
+ max-width: 100%;
5958
+ min-width: 0;
5959
+ margin-top: 0.75rem;
5960
+ }
5961
+ .tab-content > .tab-pane {
5962
+ grid-area: 1 / 1;
5963
+ display: block;
5436
5964
  width: 100%;
5437
5965
  max-width: 100%;
5438
5966
  min-width: 0;
5439
5967
  opacity: 0;
5440
- transform: translateY(0.25rem);
5441
5968
  visibility: hidden;
5442
5969
  pointer-events: none;
5443
- transition: opacity 0.16s ease, transform 0.16s ease, visibility 0s linear 0.16s;
5970
+ transition: opacity 0.16s ease, visibility 0s linear 0.16s;
5444
5971
  }
5445
5972
  .tab-content > .active {
5446
5973
  opacity: 1;
5447
- transform: none;
5448
5974
  visibility: visible;
5449
5975
  pointer-events: auto;
5450
5976
  transition-delay: 0s;
5451
5977
  }
5978
+
5979
+ /* Collapsible */
5452
5980
  .collapsible {
5453
5981
  display: flex;
5454
5982
  flex-direction: column;
@@ -5486,14 +6014,52 @@ label.btn {
5486
6014
  color: var(--moo-muted-foreground);
5487
6015
  width: 100%;
5488
6016
  }
6017
+
6018
+ /* Tooltip */
5489
6019
  .tooltip {
5490
6020
  --bs-tooltip-max-width: 20rem;
5491
6021
  --bs-tooltip-padding-x: 0.75rem;
5492
6022
  --bs-tooltip-padding-y: 0.375rem;
5493
6023
  --bs-tooltip-font-size: 0.75rem;
5494
6024
  --bs-tooltip-opacity: 1;
6025
+ --moo-tooltip-motion-duration: 150ms;
6026
+ --moo-tooltip-motion-easing: cubic-bezier(0.16, 1, 0.3, 1);
6027
+ --moo-tooltip-motion-scale: 0.95;
6028
+ --moo-tooltip-motion-translate: 0.25rem;
5495
6029
  line-height: 1.333;
5496
6030
  }
6031
+ .tooltip.fade .tooltip-inner {
6032
+ transition: transform var(--moo-tooltip-motion-duration) var(--moo-tooltip-motion-easing);
6033
+ transform: scale(var(--moo-tooltip-motion-scale));
6034
+ transform-origin: center;
6035
+ will-change: transform;
6036
+ }
6037
+ .tooltip.show .tooltip-inner {
6038
+ transform: translate3d(0, 0, 0) scale(1);
6039
+ }
6040
+ .bs-tooltip-top.fade:not(.show) .tooltip-inner,
6041
+ .bs-tooltip-auto[data-popper-placement^="top"].fade:not(.show) .tooltip-inner {
6042
+ transform: translate3d(0, var(--moo-tooltip-motion-translate), 0) scale(var(--moo-tooltip-motion-scale));
6043
+ }
6044
+ .bs-tooltip-bottom.fade:not(.show) .tooltip-inner,
6045
+ .bs-tooltip-auto[data-popper-placement^="bottom"].fade:not(.show) .tooltip-inner {
6046
+ transform: translate3d(0, calc(var(--moo-tooltip-motion-translate) * -1), 0) scale(var(--moo-tooltip-motion-scale));
6047
+ }
6048
+ .bs-tooltip-start.fade:not(.show) .tooltip-inner,
6049
+ .bs-tooltip-auto[data-popper-placement^="left"].fade:not(.show) .tooltip-inner {
6050
+ transform: translate3d(var(--moo-tooltip-motion-translate), 0, 0) scale(var(--moo-tooltip-motion-scale));
6051
+ }
6052
+ .bs-tooltip-end.fade:not(.show) .tooltip-inner,
6053
+ .bs-tooltip-auto[data-popper-placement^="right"].fade:not(.show) .tooltip-inner {
6054
+ transform: translate3d(calc(var(--moo-tooltip-motion-translate) * -1), 0, 0) scale(var(--moo-tooltip-motion-scale));
6055
+ }
6056
+ @media (prefers-reduced-motion: reduce) {
6057
+ .tooltip.fade .tooltip-inner {
6058
+ transition: none;
6059
+ transform: none;
6060
+ will-change: auto;
6061
+ }
6062
+ }
5497
6063
  .tooltip-trigger {
5498
6064
  color: var(--moo-foreground);
5499
6065
  text-decoration-line: underline;
@@ -5501,13 +6067,11 @@ label.btn {
5501
6067
  text-decoration-color: var(--moo-muted-foreground);
5502
6068
  text-underline-offset: 0.2em;
5503
6069
  }
5504
- .tooltip-kbd {
5505
- padding: 0.125rem 0.375rem;
5506
- font-size: 0.75rem;
5507
- color: var(--bs-body-bg);
5508
- background-color: var(--bs-body-color);
5509
- border-radius: var(--bs-border-radius-sm);
6070
+ .tooltip-inner kbd {
6071
+ margin-inline-start: 0.25rem;
5510
6072
  }
6073
+
6074
+ /* Popover */
5511
6075
  .popover {
5512
6076
  --bs-popover-border-radius: var(--bs-border-radius-lg);
5513
6077
  --bs-popover-border-color: var(--moo-border);
@@ -5531,11 +6095,14 @@ label.btn {
5531
6095
  .popover .popover-arrow {
5532
6096
  display: none;
5533
6097
  }
6098
+
6099
+ /* Dialog */
5534
6100
  .modal {
5535
6101
  --bs-modal-border-radius: var(--bs-border-radius-xl);
5536
6102
  --bs-modal-border-color: var(--moo-border);
5537
6103
  --bs-modal-header-border-width: 0;
5538
6104
  --bs-modal-footer-border-color: var(--moo-border);
6105
+ --bs-modal-footer-bg: color-mix(in srgb, var(--bs-secondary-bg) 50%, transparent);
5539
6106
  --bs-modal-title-line-height: 1;
5540
6107
  }
5541
6108
  .modal[tabindex]:focus-visible {
@@ -5551,9 +6118,20 @@ label.btn {
5551
6118
  .modal-header {
5552
6119
  gap: calc(var(--bs-modal-padding) * 0.75);
5553
6120
  }
6121
+ .modal-header:has(> .btn-close) {
6122
+ position: relative;
6123
+ padding-inline-end: calc( var(--bs-modal-padding) + 0.75rem + 0.6875rem + 0.5rem);
6124
+ }
6125
+ .modal-header:has(> .btn-close) > .btn-close {
6126
+ position: absolute;
6127
+ inset-block-start: 0.5rem;
6128
+ inset-inline-end: 0.5rem;
6129
+ margin: 0;
6130
+ }
5554
6131
  .modal--alert {
5555
6132
  --bs-modal-width: 24rem;
5556
6133
  --bs-modal-padding: 1rem;
6134
+ --bs-modal-footer-bg: color-mix(in srgb, var(--bs-secondary-bg) 50%, transparent);
5557
6135
  }
5558
6136
  .modal-header--alert {
5559
6137
  align-items: flex-start;
@@ -5573,6 +6151,8 @@ label.btn {
5573
6151
  .modal-footer {
5574
6152
  padding: 1rem;
5575
6153
  }
6154
+
6155
+ /* Sheet */
5576
6156
  .offcanvas.sheet {
5577
6157
  --bs-offcanvas-width: 24rem;
5578
6158
  --bs-offcanvas-border-color: var(--moo-border);
@@ -5586,15 +6166,101 @@ label.btn {
5586
6166
  font-size: 1rem;
5587
6167
  font-weight: 500;
5588
6168
  }
6169
+
6170
+ /* Toast */
5589
6171
  .toast {
5590
6172
  --bs-toast-border-radius: var(--bs-border-radius-lg);
5591
6173
  --bs-toast-border-color: var(--moo-border);
6174
+ --bs-toast-bg: var(--bs-body-bg);
5592
6175
  --bs-toast-box-shadow: var(--bs-box-shadow-lg);
6176
+ --bs-toast-header-bg: var(--bs-body-bg);
5593
6177
  --bs-toast-padding-x: 1rem;
5594
6178
  }
6179
+ .toast-container {
6180
+ z-index: var(--bs-toast-zindex, 1090);
6181
+ }
5595
6182
  .toast-header strong {
5596
6183
  font-weight: 500;
5597
6184
  }
6185
+ .toast-status-icon {
6186
+ display: inline-flex;
6187
+ flex: 0 0 auto;
6188
+ margin-inline-end: 0.5rem;
6189
+ color: var(--bs-secondary-color);
6190
+ }
6191
+ .toast-status-icon [data-icon] {
6192
+ width: 1rem;
6193
+ height: 1rem;
6194
+ }
6195
+ .toast[data-toast-variant="success"] .toast-status-icon {
6196
+ color: var(--moo-success);
6197
+ }
6198
+ .toast[data-toast-variant="info"] .toast-status-icon {
6199
+ color: var(--moo-info);
6200
+ }
6201
+ .toast[data-toast-variant="warning"] .toast-status-icon {
6202
+ color: var(--moo-warning);
6203
+ }
6204
+ .toast[data-toast-variant="destructive"] .toast-status-icon {
6205
+ color: var(--moo-destructive);
6206
+ }
6207
+ .toast[data-toast-variant="loading"] .toast-status-icon [data-icon] {
6208
+ animation: moo-spinner-rotate 0.75s linear infinite;
6209
+ }
6210
+ .toast-container--stacked[data-toast-stack="deck"] {
6211
+ --moo-toast-stack-gap: 0.75rem;
6212
+ --moo-toast-stack-peek: 0.75rem;
6213
+ --moo-toast-stack-scale-step: 0.1;
6214
+ --moo-toast-stack-min-scale: 0.5;
6215
+ --moo-toast-stack-enter-y: 150%;
6216
+ }
6217
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] {
6218
+ bottom: 1rem !important;
6219
+ inset-inline-end: 1rem !important;
6220
+ height: 0;
6221
+ max-width: calc(100vw - 2rem);
6222
+ padding: 0 !important;
6223
+ width: min(24rem, calc(100vw - 2rem));
6224
+ }
6225
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] > .toast[data-toast-stack-index] {
6226
+ inset-block-end: 0;
6227
+ inset-inline-end: 0;
6228
+ max-width: none;
6229
+ margin-bottom: 0;
6230
+ position: absolute;
6231
+ width: 100%;
6232
+ transform: translateY(var(--moo-toast-stack-collapsed-y, 0px)) scale(var(--moo-toast-stack-scale, 1));
6233
+ transform-origin: bottom center;
6234
+ z-index: var(--moo-toast-stack-z, 1);
6235
+ transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.5s ease, height 0.15s ease;
6236
+ }
6237
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] > .toast[data-toast-stack-entering] {
6238
+ transform: translateY(calc(var(--moo-toast-stack-collapsed-y, 0px) + var(--moo-toast-stack-enter-y, 150%))) scale(var(--moo-toast-stack-scale, 1));
6239
+ }
6240
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] > .toast[data-toast-stack-limited] {
6241
+ opacity: 0;
6242
+ pointer-events: none;
6243
+ }
6244
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active]:hover > .toast[data-toast-stack-index],
6245
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active]:focus-within > .toast[data-toast-stack-index],
6246
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active][data-toast-stack-hovering] > .toast[data-toast-stack-index] {
6247
+ transform: translateY(var(--moo-toast-stack-expanded-y, 0px)) scale(1);
6248
+ }
6249
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active]:hover > .toast[data-toast-stack-entering],
6250
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active]:focus-within > .toast[data-toast-stack-entering],
6251
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active][data-toast-stack-hovering] > .toast[data-toast-stack-entering] {
6252
+ transform: translateY(calc(var(--moo-toast-stack-collapsed-y, 0px) + var(--moo-toast-stack-enter-y, 150%))) scale(var(--moo-toast-stack-scale, 1));
6253
+ }
6254
+ @media (prefers-reduced-motion: reduce) {
6255
+ .toast[data-toast-variant="loading"] .toast-status-icon [data-icon] {
6256
+ animation: none;
6257
+ }
6258
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] > .toast[data-toast-stack-index] {
6259
+ transition: none;
6260
+ }
6261
+ }
6262
+
6263
+ /* Field */
5598
6264
  .field {
5599
6265
  display: flex;
5600
6266
  flex-direction: column;
@@ -5604,9 +6270,30 @@ label.btn {
5604
6270
  margin-bottom: 0;
5605
6271
  font-weight: 500;
5606
6272
  }
5607
- .field:has(> .is-invalid) > .form-label {
6273
+ .field[data-invalid="true"] {
5608
6274
  color: var(--bs-form-invalid-color);
5609
6275
  }
6276
+ .field--switch {
6277
+ flex-direction: row;
6278
+ align-items: flex-start;
6279
+ justify-content: space-between;
6280
+ gap: 1.25rem;
6281
+ }
6282
+ .field--switch > :first-child {
6283
+ min-width: 0;
6284
+ }
6285
+ .field--switch > label {
6286
+ flex: 0 0 auto;
6287
+ margin: 0;
6288
+ }
6289
+ .field--switch .form-label {
6290
+ margin-bottom: 0.25rem;
6291
+ font-weight: 500;
6292
+ }
6293
+ .field--disabled {
6294
+ opacity: 0.5;
6295
+ pointer-events: none;
6296
+ }
5610
6297
  .field-description,
5611
6298
  .field-error {
5612
6299
  margin-top: 0;
@@ -5620,6 +6307,10 @@ label.btn {
5620
6307
  .field-group > hr {
5621
6308
  margin-block: 0;
5622
6309
  }
6310
+ .field-group.row {
6311
+ flex-direction: row;
6312
+ gap: 0;
6313
+ }
5623
6314
  .field-form {
5624
6315
  display: flex;
5625
6316
  flex-direction: column;
@@ -5645,6 +6336,209 @@ label.btn {
5645
6336
  .field-fieldset + hr {
5646
6337
  opacity: 0.1;
5647
6338
  }
6339
+
6340
+ /* Date Picker */
6341
+ .moo-datepicker {
6342
+ --moo-datepicker-width: 17.5rem;
6343
+ --moo-datepicker-popover-offset: 0.375rem;
6344
+ position: relative;
6345
+ width: 100%;
6346
+ max-width: var(--moo-datepicker-width);
6347
+ }
6348
+ .moo-datepicker__trigger {
6349
+ width: 100%;
6350
+ justify-content: flex-start;
6351
+ text-align: start;
6352
+ }
6353
+ .moo-datepicker__trigger [data-datepicker-label] {
6354
+ min-width: 0;
6355
+ overflow: hidden;
6356
+ text-overflow: ellipsis;
6357
+ }
6358
+ .moo-datepicker__trigger.is-invalid {
6359
+ border-color: var(--bs-form-invalid-border-color);
6360
+ color: var(--bs-form-invalid-color);
6361
+ }
6362
+ .moo-datepicker-time-row {
6363
+ display: flex;
6364
+ flex-wrap: wrap;
6365
+ align-items: flex-end;
6366
+ gap: 0.75rem;
6367
+ width: 100%;
6368
+ }
6369
+ .moo-datepicker-time-row > :first-child {
6370
+ min-width: 0;
6371
+ }
6372
+ .moo-datepicker-time {
6373
+ flex: 0 0 auto;
6374
+ width: calc(17.5rem / 2);
6375
+ max-width: 9rem;
6376
+ }
6377
+ .moo-datepicker__popover {
6378
+ position: absolute;
6379
+ inset-block-start: calc(100% + var(--moo-datepicker-popover-offset));
6380
+ inset-inline-start: 0;
6381
+ z-index: 1000;
6382
+ width: max-content;
6383
+ max-width: calc(100vw - 1rem);
6384
+ padding: 0.75rem;
6385
+ border: var(--bs-border-width) solid var(--bs-border-color);
6386
+ border-radius: var(--bs-border-radius-lg);
6387
+ background: var(--bs-body-bg);
6388
+ color: var(--bs-body-color);
6389
+ box-shadow: var(--bs-box-shadow-lg);
6390
+ }
6391
+ .moo-datepicker__popover[hidden] {
6392
+ display: none !important;
6393
+ }
6394
+ .moo-datepicker__popover.show {
6395
+ display: block;
6396
+ }
6397
+ .moo-datepicker__popover[data-datepicker-placement] {
6398
+ inset: auto;
6399
+ }
6400
+ .moo-calendar {
6401
+ --moo-datepicker-day-size: 2rem;
6402
+ --moo-datepicker-gap: 0.25rem;
6403
+ --moo-datepicker-padding: 0.75rem;
6404
+ --moo-datepicker-preset-gap: 0.375rem;
6405
+ --moo-datepicker-day-border-radius: var(--bs-border-radius-sm);
6406
+ --moo-datepicker-day-range-joined-border-radius: 0;
6407
+ width: calc(var(--moo-datepicker-day-size) * 7 + var(--moo-datepicker-gap) * 6);
6408
+ max-width: 100%;
6409
+ color: var(--bs-body-color);
6410
+ }
6411
+ .moo-calendar__header {
6412
+ display: grid;
6413
+ grid-template-columns: var(--moo-datepicker-day-size) minmax(0, 1fr) var(--moo-datepicker-day-size);
6414
+ align-items: center;
6415
+ gap: var(--moo-datepicker-gap);
6416
+ margin-bottom: 0.75rem;
6417
+ }
6418
+ .moo-calendar__caption {
6419
+ display: inline-flex;
6420
+ min-width: 0;
6421
+ align-items: center;
6422
+ justify-content: center;
6423
+ gap: var(--moo-datepicker-gap);
6424
+ font-weight: 500;
6425
+ }
6426
+ .moo-calendar__select {
6427
+ min-width: 0;
6428
+ height: calc(1.42857em + 0.5rem + calc(var(--bs-border-width) * 2));
6429
+ padding: 0 0.375rem;
6430
+ border: var(--bs-border-width) solid var(--bs-border-color);
6431
+ border-radius: var(--bs-border-radius-sm);
6432
+ background: var(--bs-body-bg);
6433
+ color: var(--bs-body-color);
6434
+ font: inherit;
6435
+ }
6436
+ .moo-calendar__nav {
6437
+ color: var(--bs-secondary-color);
6438
+ }
6439
+ .moo-calendar__nav:hover,
6440
+ .moo-calendar__nav:focus-visible {
6441
+ color: var(--bs-body-color);
6442
+ }
6443
+ .moo-calendar__nav-icon {
6444
+ font-size: 1.09375rem;
6445
+ line-height: 1;
6446
+ }
6447
+ .moo-calendar__weekdays,
6448
+ .moo-calendar__week {
6449
+ display: grid;
6450
+ grid-template-columns: repeat(7, var(--moo-datepicker-day-size));
6451
+ gap: var(--moo-datepicker-gap);
6452
+ }
6453
+ .moo-calendar__week + .moo-calendar__week {
6454
+ margin-top: var(--moo-datepicker-gap);
6455
+ }
6456
+ .moo-calendar__weekdays {
6457
+ margin-bottom: var(--moo-datepicker-gap);
6458
+ }
6459
+ .moo-calendar__weekday {
6460
+ display: inline-flex;
6461
+ align-items: center;
6462
+ justify-content: center;
6463
+ width: var(--moo-datepicker-day-size);
6464
+ height: 1.5rem;
6465
+ color: var(--bs-secondary-color);
6466
+ font-size: 0.76562rem;
6467
+ font-weight: 500;
6468
+ }
6469
+ .moo-calendar__cell {
6470
+ position: relative;
6471
+ width: var(--moo-datepicker-day-size);
6472
+ height: var(--moo-datepicker-day-size);
6473
+ }
6474
+ .moo-calendar__day {
6475
+ position: relative;
6476
+ display: inline-flex;
6477
+ width: var(--moo-datepicker-day-size);
6478
+ height: var(--moo-datepicker-day-size);
6479
+ align-items: center;
6480
+ justify-content: center;
6481
+ padding: 0;
6482
+ border: 0;
6483
+ border-radius: var(--moo-datepicker-day-border-radius);
6484
+ background: transparent;
6485
+ color: var(--bs-body-color);
6486
+ font: inherit;
6487
+ line-height: 1;
6488
+ }
6489
+ .moo-calendar__day:hover:not(:disabled),
6490
+ .moo-calendar__day:focus-visible {
6491
+ background: var(--moo-muted-surface);
6492
+ outline: 0;
6493
+ }
6494
+ .moo-calendar__day:focus-visible {
6495
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
6496
+ }
6497
+ .moo-calendar__day[data-calendar-selected="true"] {
6498
+ background: var(--moo-primary);
6499
+ color: var(--moo-primary-foreground);
6500
+ }
6501
+ .moo-calendar__day[data-calendar-selected="true"]:hover:not(:disabled),
6502
+ .moo-calendar__day[data-calendar-selected="true"]:focus-visible {
6503
+ background: var(--moo-primary);
6504
+ color: var(--moo-primary-foreground);
6505
+ }
6506
+ .moo-calendar__day[data-calendar-range="middle"] {
6507
+ border-radius: var(--moo-datepicker-day-range-joined-border-radius);
6508
+ background: color-mix(in srgb, var(--moo-primary) 14%, transparent);
6509
+ color: var(--bs-body-color);
6510
+ }
6511
+ .moo-calendar__day[data-calendar-range="start"] {
6512
+ border-start-end-radius: var(--moo-datepicker-day-range-joined-border-radius);
6513
+ border-end-end-radius: var(--moo-datepicker-day-range-joined-border-radius);
6514
+ }
6515
+ .moo-calendar__day[data-calendar-range="end"] {
6516
+ border-start-start-radius: var(--moo-datepicker-day-range-joined-border-radius);
6517
+ border-end-start-radius: var(--moo-datepicker-day-range-joined-border-radius);
6518
+ }
6519
+ .moo-calendar__day[data-calendar-outside="true"] {
6520
+ color: var(--bs-secondary-color);
6521
+ }
6522
+ .moo-calendar__day[data-calendar-today="true"]:not([data-calendar-selected="true"]) {
6523
+ outline: var(--bs-border-width) solid var(--bs-border-color);
6524
+ outline-offset: calc(-1 * var(--bs-border-width));
6525
+ }
6526
+ .moo-calendar__day:disabled {
6527
+ color: var(--moo-disabled-foreground);
6528
+ cursor: default;
6529
+ opacity: var(--moo-disabled-control-opacity);
6530
+ }
6531
+ .moo-calendar__presets {
6532
+ display: flex;
6533
+ flex-wrap: wrap;
6534
+ gap: var(--moo-datepicker-preset-gap);
6535
+ margin-top: 0.75rem;
6536
+ }
6537
+ .moo-calendar__preset {
6538
+ flex: 0 0 auto;
6539
+ }
6540
+
6541
+ /* Combobox */
5648
6542
  .combobox {
5649
6543
  --moo-combobox-width: 12.5rem;
5650
6544
  --moo-combobox-multiple-width: 20rem;
@@ -5723,10 +6617,6 @@ label.btn {
5723
6617
  padding-inline: 0.625rem;
5724
6618
  cursor: text;
5725
6619
  }
5726
- .combobox-chips:focus-within {
5727
- border-color: #8b8b8b;
5728
- box-shadow: 0 0 0 2px rgba(23, 23, 23, 0.25);
5729
- }
5730
6620
  .combobox-value {
5731
6621
  display: flex;
5732
6622
  min-width: 0;
@@ -5796,10 +6686,11 @@ label.btn {
5796
6686
  display: none;
5797
6687
  }
5798
6688
  .combobox-option {
5799
- display: flex;
6689
+ display: grid;
6690
+ grid-template-columns: minmax(0, 1fr) 1rem;
5800
6691
  align-items: center;
5801
6692
  gap: 0.5rem;
5802
- padding-inline-end: 2rem;
6693
+ padding-inline-end: 0.375rem;
5803
6694
  line-height: var(--moo-combobox-option-line-height);
5804
6695
  }
5805
6696
  .combobox-option__content {
@@ -5808,9 +6699,18 @@ label.btn {
5808
6699
  flex: 1 1 auto;
5809
6700
  flex-direction: column;
5810
6701
  }
5811
- .combobox-option[aria-current="true"] {
6702
+ .combobox:not(.combobox--multiple) .combobox-option[aria-selected="true"],
6703
+ .combobox-option[aria-current="true"] {
5812
6704
  background-color: var(--bs-dropdown-link-hover-bg);
5813
6705
  }
6706
+ .combobox:not(.combobox--multiple)
6707
+ .combobox-menu:has(.combobox-option:not([aria-selected="true"]):hover)
6708
+ .combobox-option[aria-selected="true"]:not(:hover):not([aria-current="true"]),
6709
+ .combobox:not(.combobox--multiple)
6710
+ .combobox-menu:has(.combobox-option[aria-current="true"]:not([aria-selected="true"]))
6711
+ .combobox-option[aria-selected="true"]:not([aria-current="true"]) {
6712
+ background-color: transparent;
6713
+ }
5814
6714
  .combobox-option[aria-selected="true"] {
5815
6715
  font-weight: 500;
5816
6716
  }
@@ -5832,8 +6732,7 @@ label.btn {
5832
6732
  }
5833
6733
  .combobox-option__check {
5834
6734
  display: inline-flex;
5835
- flex: 0 0 auto;
5836
- margin-inline-start: auto;
6735
+ justify-self: end;
5837
6736
  visibility: hidden;
5838
6737
  }
5839
6738
  .combobox-option[aria-selected="true"] .combobox-option__check {
@@ -5855,6 +6754,8 @@ label.btn {
5855
6754
  color: var(--bs-secondary-color);
5856
6755
  text-align: center;
5857
6756
  }
6757
+
6758
+ /* Context Menu */
5858
6759
  .context-menu {
5859
6760
  position: relative;
5860
6761
  }
@@ -5869,43 +6770,135 @@ label.btn {
5869
6770
  ul.context-menu-menu:focus-visible {
5870
6771
  outline: 0;
5871
6772
  }
6773
+
6774
+ /* Data Table */
5872
6775
  .datatable {
5873
6776
  --moo-datatable-min-width: 48rem;
6777
+ --moo-datatable-actions-cell-bg: var(--bs-body-bg);
6778
+ --moo-datatable-actions-cell-fade-width: 1.25rem;
5874
6779
  --moo-datatable-card-label-width: 7rem;
5875
6780
  --moo-datatable-frame-header-min-height: 2.78125rem;
5876
- --moo-datatable-select-cell-inset: 0.89062rem;
6781
+ --moo-datatable-select-cell-inset: 0.82812rem;
5877
6782
  --moo-datatable-table-select-all-offset-y: 0.04688rem;
5878
6783
  --moo-datatable-toolbar-control-height: calc(2rem + var(--bs-border-width) * 2);
5879
6784
  --moo-datatable-search-filter-menu-width: 12.5rem;
5880
6785
  --moo-datatable-search-filter-options-menu-width: 17rem;
5881
6786
  --moo-datatable-scrollbar-size: 0.375rem;
6787
+ --moo-datatable-bulk-actions-bottom: 1rem;
6788
+ }
6789
+ .card .datatable {
6790
+ --moo-datatable-actions-cell-bg: var(--bs-card-bg);
5882
6791
  }
5883
6792
  .datatable-table {
5884
6793
  table-layout: fixed;
5885
6794
  }
5886
6795
  .datatable--responsive-scroll .datatable-table,
5887
- .datatable--responsive-toggle .datatable-table {
6796
+ .datatable--responsive-toggle .datatable-table,
6797
+ .datatable--responsive-auto .datatable-table {
5888
6798
  min-width: var(--moo-datatable-min-width);
5889
6799
  }
5890
- .datatable--responsive-toggle[data-datatable-view="table"] .datatable-card-frame {
6800
+ .datatable--responsive-toggle[data-datatable-view="table"] .datatable-card-frame,
6801
+ .datatable--responsive-auto[data-datatable-view="table"] .datatable-card-frame {
5891
6802
  display: none;
5892
6803
  }
5893
- .datatable--responsive-toggle[data-datatable-view="cards"] .datatable-frame {
6804
+ .datatable--responsive-toggle[data-datatable-view="cards"] .datatable-frame,
6805
+ .datatable--responsive-auto[data-datatable-view="cards"] .datatable-frame {
5894
6806
  display: none;
5895
6807
  }
5896
- .datatable-frame {
5897
- border: var(--bs-border-width) solid var(--bs-border-color);
5898
- border-radius: var(--bs-border-radius);
5899
- overflow: hidden;
6808
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="sm"] {
6809
+ --moo-datatable-responsive-breakpoint: 576px;
5900
6810
  }
5901
- .datatable-card-frame {
5902
- border: var(--bs-border-width) solid var(--bs-border-color);
5903
- border-radius: var(--bs-border-radius);
5904
- overflow: hidden;
6811
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="sm"][data-datatable-view="auto"] .datatable-card-frame {
6812
+ display: none;
5905
6813
  }
5906
- .datatable-frame:has(.table-row-actions .dropdown-menu.show),
5907
- .datatable-frame .table-responsive:has(.table-row-actions .dropdown-menu.show) {
5908
- overflow: visible;
6814
+ @media (max-width: 575.98px) {
6815
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="sm"][data-datatable-view="auto"] .datatable-frame {
6816
+ display: none;
6817
+ }
6818
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="sm"][data-datatable-view="auto"] .datatable-card-frame {
6819
+ display: block;
6820
+ }
6821
+ }
6822
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="md"] {
6823
+ --moo-datatable-responsive-breakpoint: 768px;
6824
+ }
6825
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="md"][data-datatable-view="auto"] .datatable-card-frame {
6826
+ display: none;
6827
+ }
6828
+ @media (max-width: 767.98px) {
6829
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="md"][data-datatable-view="auto"] .datatable-frame {
6830
+ display: none;
6831
+ }
6832
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="md"][data-datatable-view="auto"] .datatable-card-frame {
6833
+ display: block;
6834
+ }
6835
+ }
6836
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="lg"] {
6837
+ --moo-datatable-responsive-breakpoint: 992px;
6838
+ }
6839
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="lg"][data-datatable-view="auto"] .datatable-card-frame {
6840
+ display: none;
6841
+ }
6842
+ @media (max-width: 991.98px) {
6843
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="lg"][data-datatable-view="auto"] .datatable-frame {
6844
+ display: none;
6845
+ }
6846
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="lg"][data-datatable-view="auto"] .datatable-card-frame {
6847
+ display: block;
6848
+ }
6849
+ }
6850
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xl"] {
6851
+ --moo-datatable-responsive-breakpoint: 1200px;
6852
+ }
6853
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xl"][data-datatable-view="auto"] .datatable-card-frame {
6854
+ display: none;
6855
+ }
6856
+ @media (max-width: 1199.98px) {
6857
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xl"][data-datatable-view="auto"] .datatable-frame {
6858
+ display: none;
6859
+ }
6860
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xl"][data-datatable-view="auto"] .datatable-card-frame {
6861
+ display: block;
6862
+ }
6863
+ }
6864
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xxl"] {
6865
+ --moo-datatable-responsive-breakpoint: 1400px;
6866
+ }
6867
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xxl"][data-datatable-view="auto"] .datatable-card-frame {
6868
+ display: none;
6869
+ }
6870
+ @media (max-width: 1399.98px) {
6871
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xxl"][data-datatable-view="auto"] .datatable-frame {
6872
+ display: none;
6873
+ }
6874
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xxl"][data-datatable-view="auto"] .datatable-card-frame {
6875
+ display: block;
6876
+ }
6877
+ }
6878
+ .datatable-frame {
6879
+ border: var(--bs-border-width) solid var(--bs-border-color);
6880
+ border-radius: var(--bs-border-radius);
6881
+ overflow: hidden;
6882
+ }
6883
+ .datatable-card-frame {
6884
+ border: var(--bs-border-width) solid var(--bs-border-color);
6885
+ border-radius: var(--bs-border-radius);
6886
+ overflow: hidden;
6887
+ }
6888
+ .datatable-frame [data-datatable-column="actions"] {
6889
+ position: sticky;
6890
+ inset-inline-end: 0;
6891
+ z-index: 2;
6892
+ background: linear-gradient(90deg, transparent 0, var(--moo-datatable-actions-cell-bg) var(--moo-datatable-actions-cell-fade-width));
6893
+ }
6894
+ [dir="rtl"] .datatable-frame [data-datatable-column="actions"],
6895
+ .datatable-frame [dir="rtl"] [data-datatable-column="actions"] {
6896
+ background: linear-gradient(270deg, transparent 0, var(--moo-datatable-actions-cell-bg) var(--moo-datatable-actions-cell-fade-width));
6897
+ }
6898
+ .datatable-card-frame:has(.datatable-card .dropdown-menu.show) {
6899
+ position: relative;
6900
+ z-index: 1000;
6901
+ overflow: visible;
5909
6902
  }
5910
6903
  .datatable-frame-header {
5911
6904
  display: flex;
@@ -5929,6 +6922,16 @@ label.btn {
5929
6922
  .datatable-table > :not(caption) > * > * {
5930
6923
  vertical-align: middle;
5931
6924
  }
6925
+ .datatable-col > .btn-link,
6926
+ .datatable-card-title > .btn-link {
6927
+ max-inline-size: 100%;
6928
+ white-space: normal;
6929
+ overflow-wrap: anywhere;
6930
+ text-align: inherit;
6931
+ }
6932
+ .datatable-table > :not(caption) > * > .datatable-col:nth-child(1 of :not(.datatable-col-hidden)) {
6933
+ padding-inline-start: 1rem;
6934
+ }
5932
6935
  .datatable-toolbar {
5933
6936
  display: flex;
5934
6937
  flex-wrap: wrap;
@@ -5964,6 +6967,9 @@ label.btn {
5964
6967
  min-block-size: var(--moo-datatable-toolbar-control-height);
5965
6968
  width: 100%;
5966
6969
  }
6970
+ .datatable-searchbar:not(:has(> .dropdown-menu.show)) {
6971
+ overflow: hidden;
6972
+ }
5967
6973
  .datatable-searchbar .datatable-search {
5968
6974
  flex: 1 1 auto;
5969
6975
  max-width: none;
@@ -5975,7 +6981,7 @@ label.btn {
5975
6981
  position: absolute;
5976
6982
  inset-block-start: 50%;
5977
6983
  inset-inline-start: 0.625rem;
5978
- z-index: 2;
6984
+ z-index: 6;
5979
6985
  display: inline-flex;
5980
6986
  align-items: center;
5981
6987
  justify-content: center;
@@ -6213,6 +7219,11 @@ label.btn {
6213
7219
  color: var(--bs-body-color);
6214
7220
  background-color: var(--moo-muted-surface);
6215
7221
  }
7222
+ .datatable-view-toggle .btn-check:focus-visible + .datatable-view-option {
7223
+ z-index: 3;
7224
+ border-color: var(--moo-ring);
7225
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
7226
+ }
6216
7227
  .datatable-view-trigger {
6217
7228
  min-block-size: var(--moo-datatable-toolbar-control-height);
6218
7229
  }
@@ -6334,13 +7345,6 @@ label.btn {
6334
7345
  border-radius: var(--bs-border-radius);
6335
7346
  background-color: var(--bs-body-bg);
6336
7347
  }
6337
- .datatable-card-frame:has(.datatable-card .dropdown-menu.show),
6338
- .datatable-card:has(.dropdown-menu.show) {
6339
- overflow: visible;
6340
- }
6341
- .datatable-card:has(.dropdown-menu.show) {
6342
- z-index: 2;
6343
- }
6344
7348
  .datatable-card-header {
6345
7349
  display: grid;
6346
7350
  grid-template-columns: auto minmax(0, 1fr) auto;
@@ -6348,7 +7352,10 @@ label.btn {
6348
7352
  align-items: center;
6349
7353
  padding: 0.5rem 0.75rem;
6350
7354
  border-bottom: var(--bs-border-width) solid var(--bs-border-color);
6351
- background-color: var(--bs-tertiary-bg);
7355
+ background-color: color-mix(in srgb, var(--moo-surface) 50%, var(--moo-muted-surface));
7356
+ }
7357
+ .datatable-card-header:not(:has(> .datatable-card-select)) {
7358
+ grid-template-columns: minmax(0, 1fr) auto;
6352
7359
  }
6353
7360
  .datatable-card-select {
6354
7361
  display: inline-flex;
@@ -6428,6 +7435,10 @@ label.btn {
6428
7435
  .datatable-row-selected > td {
6429
7436
  background-color: var(--moo-muted-surface);
6430
7437
  }
7438
+ .datatable-row-selected > [data-datatable-column="actions"] {
7439
+ --moo-datatable-actions-cell-bg: var(--moo-muted-surface);
7440
+ background: var(--moo-muted-surface);
7441
+ }
6431
7442
  .datatable-card.datatable-row-selected {
6432
7443
  border-color: var(--moo-border);
6433
7444
  background-color: var(--moo-muted-surface);
@@ -6468,6 +7479,7 @@ label.btn {
6468
7479
  max-width: 100%;
6469
7480
  justify-self: end;
6470
7481
  overflow-x: auto;
7482
+ overflow-y: hidden;
6471
7483
  -webkit-overflow-scrolling: touch;
6472
7484
  }
6473
7485
  .datatable-page-nav .pagination {
@@ -6484,8 +7496,8 @@ label.btn {
6484
7496
  flex: 0 0 auto;
6485
7497
  align-items: center;
6486
7498
  justify-content: center;
6487
- width: 1em;
6488
- height: 1em;
7499
+ width: 1rem;
7500
+ height: 1rem;
6489
7501
  border: var(--bs-border-width) solid var(--bs-border-color);
6490
7502
  border-radius: var(--moo-datatable-facet-item-border-radius);
6491
7503
  color: transparent;
@@ -6571,7 +7583,7 @@ label.btn {
6571
7583
  --moo-datatable-bulk-actions-backdrop-blur: 8px;
6572
7584
  position: fixed;
6573
7585
  inset-inline-start: 50%;
6574
- inset-block-end: 1rem;
7586
+ inset-block-end: var(--moo-datatable-bulk-actions-bottom);
6575
7587
  transform: translateX(-50%) scale(1);
6576
7588
  transition: transform 0.15s ease-out;
6577
7589
  z-index: var(--bs-zindex-fixed, 1030);
@@ -6708,41 +7720,733 @@ label.btn {
6708
7720
  .datatable--release-review {
6709
7721
  --moo-datatable-min-width: 64rem;
6710
7722
  }
7723
+
7724
+ /* Focus and keyboard navigation */
6711
7725
  .form-label,
6712
7726
  .form-check-label {
6713
7727
  user-select: none;
6714
7728
  }
6715
- }
6716
-
6717
- :where(html, body)[data-bs-theme="dark"] .moo-ui:not([data-bs-theme]) .form-select,
6718
- .moo-ui[data-bs-theme="dark"] .form-select {
6719
- --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
6720
- }
6721
-
6722
- :where(html, body)[data-bs-theme="dark"] .moo-ui:not([data-bs-theme]) .form-switch .form-check-input:not(:checked):not(:focus),
6723
- .moo-ui[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus) {
6724
- --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
6725
- }
6726
-
6727
- :where(html, body)[data-bs-theme="dark"] .moo-ui:not([data-bs-theme]) .form-check-input:checked,
6728
- .moo-ui[data-bs-theme="dark"] .form-check-input:checked {
6729
- filter: invert(1);
6730
- }
6731
-
6732
- :where(html, body)[data-bs-theme="dark"] .moo-ui:not([data-bs-theme]) .btn-close,
6733
- .moo-ui[data-bs-theme="dark"] .btn-close {
6734
- filter: var(--bs-btn-close-white-filter);
6735
- }
6736
-
6737
- .modal-backdrop,
6738
- .offcanvas-backdrop {
6739
- --bs-backdrop-opacity: var(--moo-overlay-backdrop-opacity, 1);
6740
- background-color: var(--moo-overlay-backdrop-bg, color-mix(in srgb, var(--bs-black) 10%, transparent));
6741
- -webkit-backdrop-filter: var(--moo-overlay-backdrop-filter, blur(8px));
6742
- backdrop-filter: var(--moo-overlay-backdrop-filter, blur(8px));
6743
- }
7729
+ :is(.btn, a, button, summary, [tabindex]):not(input, textarea, select):focus-visible,
7730
+ :is(.form-control, .form-select, .form-check-input):focus-visible {
7731
+ border-color: var(--moo-ring);
7732
+ outline: 0;
7733
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
7734
+ }
7735
+ .btn:focus-visible:hover,
7736
+ .btn.show:focus-visible {
7737
+ border-color: var(--bs-btn-hover-border-color);
7738
+ box-shadow: none;
7739
+ }
7740
+ .form-control:focus:not(:focus-visible),
7741
+ .form-select:focus:not(:focus-visible) {
7742
+ border-color: var(--moo-border);
7743
+ box-shadow: none;
7744
+ }
7745
+ .page-link:focus:not(:focus-visible) {
7746
+ outline: 0;
7747
+ box-shadow: none;
7748
+ }
7749
+ .page-item:not(.active) > .page-link:focus:not(:focus-visible) {
7750
+ color: var(--bs-pagination-color);
7751
+ background-color: var(--bs-pagination-bg);
7752
+ border-color: var(--bs-pagination-border-color);
7753
+ }
7754
+ .form-control.is-invalid,
7755
+ .form-control.is-invalid:focus,
7756
+ .was-validated .form-control:invalid,
7757
+ .was-validated .form-control:invalid:focus,
7758
+ .form-select.is-invalid,
7759
+ .form-select.is-invalid:focus,
7760
+ .was-validated .form-select:invalid,
7761
+ .was-validated .form-select:invalid:focus {
7762
+ box-shadow: 0 0 0 3px var(--moo-form-invalid-ring-color);
7763
+ }
7764
+ .btn-check:focus:not(:focus-visible) + .btn {
7765
+ outline: 0;
7766
+ box-shadow: none;
7767
+ }
7768
+ .btn-check:focus-visible + .btn {
7769
+ border-color: var(--moo-ring);
7770
+ outline: 0;
7771
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
7772
+ }
7773
+ .input-group > .dropdown-toggle[aria-expanded="true"]:focus-visible {
7774
+ box-shadow: none;
7775
+ }
7776
+ .combobox-chips:focus-within {
7777
+ border-color: var(--moo-ring);
7778
+ outline: 0;
7779
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
7780
+ }
7781
+ .input-group:has(> .form-control:focus):not(:has(> .form-control[type="file"])) {
7782
+ border-color: var(--moo-ring);
7783
+ outline: 0;
7784
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
7785
+ }
7786
+ .input-group.has-validation:not(:has(> :is(.valid-feedback, .invalid-feedback, .valid-tooltip, .invalid-tooltip))):has(> :is(.form-control, .form-select).is-invalid),
7787
+ .was-validated .input-group.has-validation:not(:has(> :is(.valid-feedback, .invalid-feedback, .valid-tooltip, .invalid-tooltip))):has(> :is(.form-control, .form-select):invalid) {
7788
+ border-color: var(--bs-form-invalid-border-color);
7789
+ box-shadow: 0 0 0 3px var(--moo-form-invalid-ring-color);
7790
+ }
7791
+ .input-group.has-validation:not(:has(> :is(.valid-feedback, .invalid-feedback, .valid-tooltip, .invalid-tooltip))) > :is(.form-control, .form-select).is-invalid,
7792
+ .was-validated .input-group.has-validation:not(:has(> :is(.valid-feedback, .invalid-feedback, .valid-tooltip, .invalid-tooltip))) > :is(.form-control, .form-select):invalid {
7793
+ box-shadow: none;
7794
+ }
6744
7795
 
6745
- .modal-backdrop.show,
6746
- .offcanvas-backdrop.show {
6747
- opacity: var(--moo-overlay-backdrop-opacity, 1);
7796
+ /* Scroll utilities */
7797
+ :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 ) {
7798
+ --scroll-fade-size: min(12%, 2.5rem);
7799
+ --scroll-fade-reveal: 6rem;
7800
+ --moo-scroll-fade-t-size: var(--scroll-fade-size);
7801
+ --moo-scroll-fade-b-size: var(--scroll-fade-size);
7802
+ --moo-scroll-fade-s-size: var(--scroll-fade-size);
7803
+ --moo-scroll-fade-e-size: var(--scroll-fade-size);
7804
+ --moo-scroll-fade-mask: linear-gradient(
7805
+ to bottom,
7806
+ transparent 0,
7807
+ #000 var(--moo-scroll-fade-t),
7808
+ #000 calc(100% - var(--moo-scroll-fade-b)),
7809
+ transparent 100%
7810
+ );
7811
+ mask-image: var(--moo-scroll-fade-mask);
7812
+ }
7813
+ .scroll-fade,
7814
+ .scroll-fade-y {
7815
+ animation-name: moo-scroll-fade-reveal-t, moo-scroll-fade-reveal-b;
7816
+ animation-duration: 1ms, 1ms;
7817
+ animation-fill-mode: both, both;
7818
+ animation-timing-function: linear, linear;
7819
+ animation-timeline: scroll(self y), scroll(self y);
7820
+ animation-range: 0 var(--scroll-fade-reveal), calc(100% - var(--scroll-fade-reveal)) 100%;
7821
+ }
7822
+ .scroll-fade-t {
7823
+ animation-name: moo-scroll-fade-reveal-t;
7824
+ animation-duration: 1ms;
7825
+ animation-fill-mode: both;
7826
+ animation-timing-function: linear;
7827
+ animation-timeline: scroll(self y);
7828
+ animation-range: 0 var(--scroll-fade-reveal);
7829
+ }
7830
+ .scroll-fade-b {
7831
+ animation-name: moo-scroll-fade-reveal-b;
7832
+ animation-duration: 1ms;
7833
+ animation-fill-mode: both;
7834
+ animation-timing-function: linear;
7835
+ animation-timeline: scroll(self y);
7836
+ animation-range: calc(100% - var(--scroll-fade-reveal)) 100%;
7837
+ }
7838
+ .scroll-fade-x,
7839
+ .scroll-fade-s,
7840
+ .scroll-fade-e {
7841
+ --moo-scroll-fade-mask: linear-gradient(
7842
+ to right,
7843
+ transparent 0,
7844
+ #000 var(--moo-scroll-fade-s),
7845
+ #000 calc(100% - var(--moo-scroll-fade-e)),
7846
+ transparent 100%
7847
+ );
7848
+ }
7849
+ .scroll-fade-x {
7850
+ animation-name: moo-scroll-fade-reveal-s, moo-scroll-fade-reveal-e;
7851
+ animation-duration: 1ms, 1ms;
7852
+ animation-fill-mode: both, both;
7853
+ animation-timing-function: linear, linear;
7854
+ animation-timeline: scroll(self inline), scroll(self inline);
7855
+ animation-range: 0 var(--scroll-fade-reveal), calc(100% - var(--scroll-fade-reveal)) 100%;
7856
+ }
7857
+ .scroll-fade-s {
7858
+ animation-name: moo-scroll-fade-reveal-s;
7859
+ animation-duration: 1ms;
7860
+ animation-fill-mode: both;
7861
+ animation-timing-function: linear;
7862
+ animation-timeline: scroll(self inline);
7863
+ animation-range: 0 var(--scroll-fade-reveal);
7864
+ }
7865
+ .scroll-fade-e {
7866
+ animation-name: moo-scroll-fade-reveal-e;
7867
+ animation-duration: 1ms;
7868
+ animation-fill-mode: both;
7869
+ animation-timing-function: linear;
7870
+ animation-timeline: scroll(self inline);
7871
+ animation-range: calc(100% - var(--scroll-fade-reveal)) 100%;
7872
+ }
7873
+ .scroll-fade-x:where([dir="rtl"], [dir="rtl"] *),
7874
+ .scroll-fade-s:where([dir="rtl"], [dir="rtl"] *),
7875
+ .scroll-fade-e:where([dir="rtl"], [dir="rtl"] *) {
7876
+ --moo-scroll-fade-mask: linear-gradient(
7877
+ to left,
7878
+ transparent 0,
7879
+ #000 var(--moo-scroll-fade-s),
7880
+ #000 calc(100% - var(--moo-scroll-fade-e)),
7881
+ transparent 100%
7882
+ );
7883
+ }
7884
+ .scroll-fade-l,
7885
+ .scroll-fade-r {
7886
+ --moo-scroll-fade-mask: linear-gradient(
7887
+ to right,
7888
+ transparent 0,
7889
+ #000 var(--moo-scroll-fade-s),
7890
+ #000 calc(100% - var(--moo-scroll-fade-e)),
7891
+ transparent 100%
7892
+ );
7893
+ }
7894
+ .scroll-fade-l {
7895
+ animation-name: moo-scroll-fade-reveal-s;
7896
+ animation-duration: 1ms;
7897
+ animation-fill-mode: both;
7898
+ animation-timing-function: linear;
7899
+ animation-timeline: scroll(self x);
7900
+ animation-range: 0 var(--scroll-fade-reveal);
7901
+ }
7902
+ .scroll-fade-r {
7903
+ animation-name: moo-scroll-fade-reveal-e;
7904
+ animation-duration: 1ms;
7905
+ animation-fill-mode: both;
7906
+ animation-timing-function: linear;
7907
+ animation-timeline: scroll(self x);
7908
+ animation-range: calc(100% - var(--scroll-fade-reveal)) 100%;
7909
+ }
7910
+ .scroll-fade-none {
7911
+ --moo-scroll-fade-mask: none;
7912
+ }
7913
+ .no-scrollbar {
7914
+ scrollbar-width: none;
7915
+ }
7916
+ .no-scrollbar::-webkit-scrollbar {
7917
+ display: none;
7918
+ }
7919
+ .scrollbar-thin {
7920
+ --moo-scrollbar-thin-size: 0.375rem;
7921
+ --moo-scrollbar-thin-thumb-bg: color-mix(in srgb, var(--bs-secondary-color) 28%, transparent);
7922
+ --moo-scrollbar-thin-thumb-hover-bg: color-mix(in srgb, var(--bs-secondary-color) 45%, transparent);
7923
+ scrollbar-color: var(--moo-scrollbar-thin-thumb-bg) transparent;
7924
+ scrollbar-width: thin;
7925
+ }
7926
+ .scrollbar-thin::-webkit-scrollbar {
7927
+ width: var(--moo-scrollbar-thin-size);
7928
+ height: var(--moo-scrollbar-thin-size);
7929
+ }
7930
+ .scrollbar-thin::-webkit-scrollbar-track {
7931
+ background: transparent;
7932
+ }
7933
+ .scrollbar-thin::-webkit-scrollbar-thumb {
7934
+ border-radius: var(--bs-border-radius-pill);
7935
+ background-color: var(--moo-scrollbar-thin-thumb-bg);
7936
+ }
7937
+ .scrollbar-thin::-webkit-scrollbar-thumb:hover {
7938
+ background-color: var(--moo-scrollbar-thin-thumb-hover-bg);
7939
+ }
7940
+ @supports not (animation-timeline: scroll()) {
7941
+ .scroll-fade,
7942
+ .scroll-fade-y {
7943
+ --moo-scroll-fade-t: var(--moo-scroll-fade-t-size);
7944
+ --moo-scroll-fade-b: var(--moo-scroll-fade-b-size);
7945
+ }
7946
+ .scroll-fade-x {
7947
+ --moo-scroll-fade-s: var(--moo-scroll-fade-s-size);
7948
+ --moo-scroll-fade-e: var(--moo-scroll-fade-e-size);
7949
+ }
7950
+ .scroll-fade-t {
7951
+ --moo-scroll-fade-t: var(--moo-scroll-fade-t-size);
7952
+ }
7953
+ .scroll-fade-b {
7954
+ --moo-scroll-fade-b: var(--moo-scroll-fade-b-size);
7955
+ }
7956
+ .scroll-fade-l,
7957
+ .scroll-fade-s {
7958
+ --moo-scroll-fade-s: var(--moo-scroll-fade-s-size);
7959
+ }
7960
+ .scroll-fade-r,
7961
+ .scroll-fade-e {
7962
+ --moo-scroll-fade-e: var(--moo-scroll-fade-e-size);
7963
+ }
7964
+ }
7965
+
7966
+ /* Application layout */
7967
+ .sidebar {
7968
+ --moo-sidebar-width: 16rem;
7969
+ --moo-sidebar-width-icon: 3rem;
7970
+ --bs-offcanvas-width: var(--moo-sidebar-width);
7971
+ flex: 0 0 var(--moo-sidebar-width);
7972
+ width: var(--moo-sidebar-width);
7973
+ color: var(--moo-sidebar-foreground);
7974
+ }
7975
+ .sidebar-rail {
7976
+ position: absolute;
7977
+ inset-block: 0;
7978
+ inset-inline-end: 0;
7979
+ z-index: 20;
7980
+ width: 1rem;
7981
+ padding: 0;
7982
+ transform: translateX(50%);
7983
+ border: 0;
7984
+ background: transparent;
7985
+ cursor: pointer;
7986
+ }
7987
+ .sidebar:dir(rtl) .sidebar-rail {
7988
+ transform: translateX(-50%);
7989
+ }
7990
+ .sidebar-rail::after {
7991
+ content: "";
7992
+ position: absolute;
7993
+ inset-block: 0;
7994
+ inset-inline-start: 50%;
7995
+ width: var(--bs-border-width);
7996
+ background: transparent;
7997
+ transition: background 0.15s ease;
7998
+ }
7999
+ .sidebar-rail:hover::after {
8000
+ background: var(--moo-sidebar-border);
8001
+ }
8002
+ .wrapper[data-layout="app"][data-shell-mode="contained"] .sidebar-inner {
8003
+ position: relative;
8004
+ height: 100%;
8005
+ max-height: 100%;
8006
+ }
8007
+ @media (min-width: 992px) {
8008
+ .sidebar {
8009
+ position: relative;
8010
+ }
8011
+ .sidebar.offcanvas-lg[data-collapsible="offcanvas"] {
8012
+ visibility: visible;
8013
+ transform: none;
8014
+ }
8015
+ .wrapper[data-layout="app"][data-sidebar-state="collapsed"] > .sidebar.offcanvas-lg[data-collapsible="offcanvas"] {
8016
+ flex-basis: 0;
8017
+ width: 0;
8018
+ overflow: hidden;
8019
+ visibility: hidden;
8020
+ }
8021
+ .wrapper[data-layout="app"]:has([data-sidebar-dropdown-positioned] > .dropdown-menu.show) > .sidebar {
8022
+ position: relative;
8023
+ z-index: 1031;
8024
+ }
8025
+ .wrapper[data-layout="app"]:has([data-sidebar-dropdown-positioned] > .dropdown-menu.show) > .sidebar > .sidebar-inner {
8026
+ z-index: 1031;
8027
+ }
8028
+ .wrapper[data-layout="app"][data-sidebar-state="collapsed"] .sidebar[data-collapsible="icon"] {
8029
+ flex-basis: var(--moo-sidebar-width-icon);
8030
+ width: var(--moo-sidebar-width-icon);
8031
+ }
8032
+ }
8033
+ @media (max-width: 991.98px) {
8034
+ .sidebar-rail {
8035
+ display: none;
8036
+ }
8037
+ }
8038
+ .sidebar[data-side="left"]:not([data-variant="inset"]) .sidebar-inner {
8039
+ border-right: var(--bs-border-width) solid var(--moo-sidebar-border);
8040
+ }
8041
+ .sidebar[data-side="right"] {
8042
+ order: 1;
8043
+ }
8044
+ .wrapper[data-layout="app"]:dir(rtl) > .sidebar[data-side="left"] {
8045
+ order: 1;
8046
+ }
8047
+ .wrapper[data-layout="app"]:dir(rtl) > .sidebar[data-side="right"] {
8048
+ order: 0;
8049
+ }
8050
+ .sidebar[data-side="right"]:not([data-variant="inset"]) .sidebar-inner {
8051
+ border-left: var(--bs-border-width) solid var(--moo-sidebar-border);
8052
+ }
8053
+ @media (min-width: 992px) {
8054
+ :where(.wrapper[data-layout="app"][data-sidebar-ready]) > .sidebar {
8055
+ transition: flex-basis 0.2s ease, width 0.2s ease;
8056
+ }
8057
+ .sidebar[data-variant="floating"] .sidebar-inner {
8058
+ width: auto;
8059
+ height: calc(100svh - 1rem);
8060
+ max-height: calc(100svh - 1rem);
8061
+ margin: 0.5rem;
8062
+ border: var(--bs-border-width) solid var(--moo-sidebar-border);
8063
+ border-radius: var(--bs-border-radius-lg);
8064
+ box-shadow: var(--bs-box-shadow-sm);
8065
+ }
8066
+ .wrapper[data-layout="app"][data-shell-mode="contained"] .sidebar[data-variant="floating"] .sidebar-inner {
8067
+ height: calc(100% - 1rem);
8068
+ max-height: calc(100% - 1rem);
8069
+ }
8070
+ .wrapper[data-layout="app"][data-sidebar-state="collapsed"] .sidebar[data-variant="floating"][data-collapsible="icon"] {
8071
+ flex-basis: calc(var(--moo-sidebar-width-icon) + 1rem);
8072
+ width: calc(var(--moo-sidebar-width-icon) + 1rem);
8073
+ }
8074
+ .wrapper[data-layout="app"][data-sidebar-state="collapsed"] .sidebar[data-variant="floating"][data-collapsible="icon"] .sidebar-inner {
8075
+ box-shadow: var(--bs-box-shadow);
8076
+ }
8077
+ }
8078
+ @media (prefers-reduced-motion: reduce) {
8079
+ .sidebar {
8080
+ transition: none;
8081
+ }
8082
+ }
8083
+ @media (min-width: 992px) {
8084
+ .wrapper[data-layout="app"]:has(> .sidebar[data-variant="inset"]) {
8085
+ background: var(--moo-sidebar);
8086
+ }
8087
+ .wrapper[data-layout="app"]:has(> .sidebar[data-variant="inset"]) > [data-slot="page"] {
8088
+ margin: 0.5rem;
8089
+ margin-left: 0;
8090
+ border-radius: var(--bs-border-radius-xl);
8091
+ box-shadow: var(--bs-box-shadow-sm);
8092
+ background: var(--bs-body-bg);
8093
+ }
8094
+ .wrapper[data-layout="app"]:has(> .sidebar[data-variant="inset"]) > [data-slot="page"] > header {
8095
+ border-top-left-radius: inherit;
8096
+ border-top-right-radius: inherit;
8097
+ }
8098
+ .wrapper[data-layout="app"][data-sidebar-state="collapsed"]:has(> .sidebar[data-variant="inset"]) > [data-slot="page"] {
8099
+ margin-left: 0.5rem;
8100
+ }
8101
+ .wrapper[data-layout="app"]:has(> .sidebar[data-variant="inset"][data-side="right"]) > [data-slot="page"] {
8102
+ margin-left: 0.5rem;
8103
+ margin-right: 0;
8104
+ }
8105
+ .wrapper[data-layout="app"][data-sidebar-state="collapsed"]:has(> .sidebar[data-variant="inset"][data-side="right"]) > [data-slot="page"] {
8106
+ margin-right: 0.5rem;
8107
+ }
8108
+ }
8109
+ .wrapper[data-layout="app"] {
8110
+ display: flex;
8111
+ width: 100%;
8112
+ height: 100svh;
8113
+ min-height: 0;
8114
+ overflow: hidden;
8115
+ }
8116
+ .wrapper[data-layout="app"][data-shell-mode="contained"] {
8117
+ min-height: 0;
8118
+ height: 34rem;
8119
+ overflow: hidden;
8120
+ border: var(--bs-border-width) solid var(--moo-border);
8121
+ border-radius: var(--bs-border-radius-xl);
8122
+ }
8123
+ .wrapper[data-layout="app"] > [data-slot="page"] {
8124
+ display: flex;
8125
+ min-width: 0;
8126
+ min-height: 0;
8127
+ flex: 1 1 auto;
8128
+ flex-direction: column;
8129
+ }
8130
+ .wrapper[data-layout="app"] > [data-slot="page"] > header,
8131
+ .wrapper[data-layout="app"] > [data-slot="page"] > main,
8132
+ .wrapper[data-layout="app"] > [data-slot="page"] > footer {
8133
+ flex: 0 0 auto;
8134
+ }
8135
+ .wrapper[data-layout="app"] > [data-slot="page"] > main {
8136
+ display: flex;
8137
+ min-height: 0;
8138
+ flex: 1 1 auto;
8139
+ flex-direction: column;
8140
+ overflow-y: auto;
8141
+ }
8142
+ .wrapper[data-layout="app"] > [data-slot="page"] > main > :is( .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl, .container-fluid ) {
8143
+ display: flex;
8144
+ min-height: 0;
8145
+ flex: 1 1 auto;
8146
+ flex-direction: column;
8147
+ }
8148
+ @media (max-width: 991.98px) {
8149
+ .wrapper[data-layout="app"][data-shell-mode="contained"] {
8150
+ flex-direction: column;
8151
+ height: auto;
8152
+ min-height: 0;
8153
+ overflow: visible;
8154
+ }
8155
+ .wrapper[data-layout="app"][data-shell-mode="contained"] > [data-slot="page"] {
8156
+ overflow: visible;
8157
+ }
8158
+ .wrapper[data-layout="app"][data-shell-mode="contained"] > [data-slot="page"] > main {
8159
+ overflow: visible;
8160
+ }
8161
+ }
8162
+ [data-page-container] {
8163
+ container: moo-page / inline-size;
8164
+ }
8165
+ [data-page-container] [data-page-show-from] {
8166
+ display: none !important;
8167
+ }
8168
+ @container moo-page (min-width: 576px) {
8169
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="1"] {
8170
+ width: 8.33333%;
8171
+ }
8172
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="2"] {
8173
+ width: 16.66667%;
8174
+ }
8175
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="3"] {
8176
+ width: 25%;
8177
+ }
8178
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="4"] {
8179
+ width: 33.33333%;
8180
+ }
8181
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="5"] {
8182
+ width: 41.66667%;
8183
+ }
8184
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="6"] {
8185
+ width: 50%;
8186
+ }
8187
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="7"] {
8188
+ width: 58.33333%;
8189
+ }
8190
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="8"] {
8191
+ width: 66.66667%;
8192
+ }
8193
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="9"] {
8194
+ width: 75%;
8195
+ }
8196
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="10"] {
8197
+ width: 83.33333%;
8198
+ }
8199
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="11"] {
8200
+ width: 91.66667%;
8201
+ }
8202
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-sm="12"] {
8203
+ width: 100%;
8204
+ }
8205
+ [data-page-container] [data-page-show-from="sm"] {
8206
+ display: block !important;
8207
+ }
8208
+ [data-page-container] [data-page-hide-from="sm"] {
8209
+ display: none !important;
8210
+ }
8211
+ }
8212
+ @container moo-page (min-width: 768px) {
8213
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="1"] {
8214
+ width: 8.33333%;
8215
+ }
8216
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="2"] {
8217
+ width: 16.66667%;
8218
+ }
8219
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="3"] {
8220
+ width: 25%;
8221
+ }
8222
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="4"] {
8223
+ width: 33.33333%;
8224
+ }
8225
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="5"] {
8226
+ width: 41.66667%;
8227
+ }
8228
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="6"] {
8229
+ width: 50%;
8230
+ }
8231
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="7"] {
8232
+ width: 58.33333%;
8233
+ }
8234
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="8"] {
8235
+ width: 66.66667%;
8236
+ }
8237
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="9"] {
8238
+ width: 75%;
8239
+ }
8240
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="10"] {
8241
+ width: 83.33333%;
8242
+ }
8243
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="11"] {
8244
+ width: 91.66667%;
8245
+ }
8246
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-md="12"] {
8247
+ width: 100%;
8248
+ }
8249
+ [data-page-container] [data-page-show-from="md"] {
8250
+ display: block !important;
8251
+ }
8252
+ [data-page-container] [data-page-hide-from="md"] {
8253
+ display: none !important;
8254
+ }
8255
+ }
8256
+ @container moo-page (min-width: 992px) {
8257
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="1"] {
8258
+ width: 8.33333%;
8259
+ }
8260
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="2"] {
8261
+ width: 16.66667%;
8262
+ }
8263
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="3"] {
8264
+ width: 25%;
8265
+ }
8266
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="4"] {
8267
+ width: 33.33333%;
8268
+ }
8269
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="5"] {
8270
+ width: 41.66667%;
8271
+ }
8272
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="6"] {
8273
+ width: 50%;
8274
+ }
8275
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="7"] {
8276
+ width: 58.33333%;
8277
+ }
8278
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="8"] {
8279
+ width: 66.66667%;
8280
+ }
8281
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="9"] {
8282
+ width: 75%;
8283
+ }
8284
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="10"] {
8285
+ width: 83.33333%;
8286
+ }
8287
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="11"] {
8288
+ width: 91.66667%;
8289
+ }
8290
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-lg="12"] {
8291
+ width: 100%;
8292
+ }
8293
+ [data-page-container] [data-page-show-from="lg"] {
8294
+ display: block !important;
8295
+ }
8296
+ [data-page-container] [data-page-hide-from="lg"] {
8297
+ display: none !important;
8298
+ }
8299
+ }
8300
+ @container moo-page (min-width: 1200px) {
8301
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="1"] {
8302
+ width: 8.33333%;
8303
+ }
8304
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="2"] {
8305
+ width: 16.66667%;
8306
+ }
8307
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="3"] {
8308
+ width: 25%;
8309
+ }
8310
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="4"] {
8311
+ width: 33.33333%;
8312
+ }
8313
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="5"] {
8314
+ width: 41.66667%;
8315
+ }
8316
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="6"] {
8317
+ width: 50%;
8318
+ }
8319
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="7"] {
8320
+ width: 58.33333%;
8321
+ }
8322
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="8"] {
8323
+ width: 66.66667%;
8324
+ }
8325
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="9"] {
8326
+ width: 75%;
8327
+ }
8328
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="10"] {
8329
+ width: 83.33333%;
8330
+ }
8331
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="11"] {
8332
+ width: 91.66667%;
8333
+ }
8334
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xl="12"] {
8335
+ width: 100%;
8336
+ }
8337
+ [data-page-container] [data-page-show-from="xl"] {
8338
+ display: block !important;
8339
+ }
8340
+ [data-page-container] [data-page-hide-from="xl"] {
8341
+ display: none !important;
8342
+ }
8343
+ }
8344
+ @container moo-page (min-width: 1400px) {
8345
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="1"] {
8346
+ width: 8.33333%;
8347
+ }
8348
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="2"] {
8349
+ width: 16.66667%;
8350
+ }
8351
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="3"] {
8352
+ width: 25%;
8353
+ }
8354
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="4"] {
8355
+ width: 33.33333%;
8356
+ }
8357
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="5"] {
8358
+ width: 41.66667%;
8359
+ }
8360
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="6"] {
8361
+ width: 50%;
8362
+ }
8363
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="7"] {
8364
+ width: 58.33333%;
8365
+ }
8366
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="8"] {
8367
+ width: 66.66667%;
8368
+ }
8369
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="9"] {
8370
+ width: 75%;
8371
+ }
8372
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="10"] {
8373
+ width: 83.33333%;
8374
+ }
8375
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="11"] {
8376
+ width: 91.66667%;
8377
+ }
8378
+ [data-page-container] .row[data-layout="page-grid"] > [data-page-col-xxl="12"] {
8379
+ width: 100%;
8380
+ }
8381
+ [data-page-container] [data-page-show-from="xxl"] {
8382
+ display: block !important;
8383
+ }
8384
+ [data-page-container] [data-page-hide-from="xxl"] {
8385
+ display: none !important;
8386
+ }
8387
+ }
8388
+
8389
+ /* Form themes */
8390
+ :scope[data-bs-theme="light"] .form-select {
8391
+ --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
8392
+ }
8393
+ :scope[data-bs-theme="dark"] .form-select {
8394
+ --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
8395
+ }
8396
+ :scope[data-bs-theme="light"] .form-switch .form-check-input:not(:checked):not(:focus) {
8397
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%2810, 10, 10, 0.25%29'/%3e%3c/svg%3e");
8398
+ }
8399
+ :scope[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus) {
8400
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
8401
+ }
8402
+
8403
+ /* Overlay backdrops */
8404
+ .modal-backdrop,
8405
+ .offcanvas-backdrop {
8406
+ --bs-backdrop-opacity: var(--moo-overlay-backdrop-opacity, 1);
8407
+ opacity: 1;
8408
+ color: transparent;
8409
+ background-color: transparent;
8410
+ }
8411
+ .modal-backdrop.fade, .modal-backdrop.fade:not(.show),
8412
+ .offcanvas-backdrop.fade,
8413
+ .offcanvas-backdrop.fade:not(.show) {
8414
+ opacity: 1;
8415
+ }
8416
+ .modal-backdrop.show,
8417
+ .offcanvas-backdrop.show {
8418
+ transition: none;
8419
+ }
8420
+ .modal-backdrop.fade:not(.show),
8421
+ .offcanvas-backdrop.fade:not(.show) {
8422
+ color: var(--bs-body-color, currentcolor);
8423
+ transition: color var(--moo-overlay-motion-duration, 0.3s) ease-out;
8424
+ }
8425
+ .modal-backdrop::before,
8426
+ .offcanvas-backdrop::before {
8427
+ position: absolute;
8428
+ inset: 0;
8429
+ content: "";
8430
+ opacity: 0;
8431
+ background-color: var(--moo-overlay-backdrop-bg, color-mix(in srgb, #0a0a0a 10%, transparent));
8432
+ -webkit-backdrop-filter: blur(0);
8433
+ backdrop-filter: blur(0);
8434
+ animation: moo-overlay-backdrop-exit var(--moo-overlay-motion-duration, 0.3s) ease-out both;
8435
+ }
8436
+ .modal-backdrop.show::before,
8437
+ .offcanvas-backdrop.show::before {
8438
+ animation: moo-overlay-backdrop-enter var(--moo-overlay-motion-duration, 0.3s) ease-out both;
8439
+ }
8440
+
8441
+ /* Typography */
8442
+ :where(h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, .display-1, .display-2, .display-3, .display-4, .display-5, .display-6) {
8443
+ font-family: var(--moo-heading-font-family, var(--bs-body-font-family));
8444
+ }
8445
+ :is(small, .small) {
8446
+ font-size: var(--moo-small-font-size);
8447
+ }
8448
+ p {
8449
+ margin-top: var(--moo-paragraph-margin-top);
8450
+ margin-bottom: var(--moo-paragraph-margin-bottom);
8451
+ }
6748
8452
  }