@ponchia/ui 0.2.1 → 0.2.2

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.
@@ -0,0 +1,311 @@
1
+ /* ==========================================================================
2
+ disclosure — tabs / accordion / segmented / breadcrumb / pagination / avatar
3
+ Tabs use an ARIA + .is-active contract (toggle via your framework or the
4
+ shipped behaviors); accordion is native <details>; segmented is a
5
+ CSS-only :has() radio group. All Nothing-flat with the dot cue.
6
+ ========================================================================== */
7
+
8
+ /* --- Tabs --- */
9
+
10
+ .ui-tabs {
11
+ display: grid;
12
+ gap: var(--space-md);
13
+ }
14
+
15
+ .ui-tabs__list {
16
+ border-block-end: 1px solid var(--line);
17
+ display: flex;
18
+ gap: 0.1rem;
19
+ overflow-x: auto;
20
+ scrollbar-width: none;
21
+ }
22
+
23
+ .ui-tabs__list::-webkit-scrollbar {
24
+ display: none;
25
+ }
26
+
27
+ .ui-tab {
28
+ background: transparent;
29
+ border: 0;
30
+ border-block-end: 2px solid transparent;
31
+ color: var(--text-dim);
32
+ cursor: pointer;
33
+ display: inline-flex;
34
+ flex: 0 0 auto;
35
+ font-family: var(--mono);
36
+ font-size: var(--text-xs);
37
+ gap: 0.4rem;
38
+ letter-spacing: var(--tracking-wide);
39
+ margin-block-end: -1px;
40
+ padding: 0.6rem 0.85rem;
41
+ text-transform: uppercase;
42
+ transition:
43
+ color var(--duration-fast) var(--ease-standard),
44
+ border-color var(--duration-fast) var(--ease-standard);
45
+ }
46
+
47
+ .ui-tab.is-active {
48
+ border-block-end-color: var(--accent);
49
+ color: var(--accent);
50
+ }
51
+
52
+ .ui-tabs__panel[hidden] {
53
+ display: none;
54
+ }
55
+
56
+ @media (hover: hover) {
57
+ .ui-tab:hover:not(.is-active) {
58
+ color: var(--text);
59
+ }
60
+ }
61
+
62
+ /* --- Accordion — styled native <details> --- */
63
+
64
+ .ui-accordion {
65
+ display: grid;
66
+ }
67
+
68
+ .ui-accordion__item {
69
+ border-block-end: 1px solid var(--line);
70
+ }
71
+
72
+ .ui-accordion__summary {
73
+ align-items: center;
74
+ color: var(--text);
75
+ cursor: pointer;
76
+ display: flex;
77
+ font-family: var(--mono);
78
+ font-size: var(--text-sm);
79
+ gap: 0.6rem;
80
+ letter-spacing: var(--tracking-wide);
81
+ list-style: none;
82
+ padding: 0.85rem 0.2rem;
83
+ text-transform: uppercase;
84
+ }
85
+
86
+ .ui-accordion__summary::-webkit-details-marker {
87
+ display: none;
88
+ }
89
+
90
+ /* Dot marker rotates into an arrow cue when open. */
91
+ .ui-accordion__summary::before {
92
+ border-inline-end: 1.5px solid var(--text-dim);
93
+ border-block-end: 1.5px solid var(--text-dim);
94
+ content: '';
95
+ block-size: 0.4rem;
96
+ transform: rotate(-45deg);
97
+ transition: transform var(--duration-fast) var(--ease-spring);
98
+ inline-size: 0.4rem;
99
+ }
100
+
101
+ .ui-accordion__item[open] .ui-accordion__summary {
102
+ color: var(--accent);
103
+ }
104
+
105
+ .ui-accordion__item[open] .ui-accordion__summary::before {
106
+ border-color: var(--accent);
107
+ transform: rotate(45deg);
108
+ }
109
+
110
+ .ui-accordion__body {
111
+ color: var(--text-soft);
112
+ padding: 0 0.2rem 0.95rem;
113
+ }
114
+
115
+ .ui-accordion__body > :first-child {
116
+ margin-block-start: 0;
117
+ }
118
+
119
+ /* --- Segmented control — CSS-only radio group --- */
120
+
121
+ .ui-segmented {
122
+ background: var(--panel-soft);
123
+ border: 1px solid var(--line-strong);
124
+ border-radius: var(--radius-md);
125
+ display: inline-flex;
126
+ gap: 1px;
127
+ overflow: hidden;
128
+ padding: 2px;
129
+ }
130
+
131
+ .ui-segmented__option {
132
+ border-radius: var(--radius-sm);
133
+ color: var(--text-soft);
134
+ cursor: pointer;
135
+ flex: 1 0 auto;
136
+ font-family: var(--mono);
137
+ font-size: var(--text-xs);
138
+ letter-spacing: var(--tracking-wide);
139
+ padding: 0.42rem 0.8rem;
140
+ text-align: center;
141
+ text-transform: uppercase;
142
+ transition:
143
+ background-color var(--duration-fast) var(--ease-standard),
144
+ color var(--duration-fast) var(--ease-standard);
145
+ white-space: nowrap;
146
+ }
147
+
148
+ .ui-segmented__option input {
149
+ position: absolute;
150
+ opacity: 0;
151
+ pointer-events: none;
152
+ }
153
+
154
+ .ui-segmented__option:has(input:checked) {
155
+ background: var(--accent);
156
+ color: var(--button-text);
157
+ }
158
+
159
+ .ui-segmented__option:has(input:focus-visible) {
160
+ outline: 2px solid var(--accent);
161
+ outline-offset: 2px;
162
+ }
163
+
164
+ @media (hover: hover) {
165
+ .ui-segmented__option:hover:not(:has(input:checked)) {
166
+ color: var(--text);
167
+ }
168
+ }
169
+
170
+ /* --- Breadcrumb --- */
171
+
172
+ .ui-breadcrumb {
173
+ align-items: center;
174
+ color: var(--text-dim);
175
+ display: flex;
176
+ flex-wrap: wrap;
177
+ font-family: var(--mono);
178
+ font-size: var(--text-2xs);
179
+ gap: 0.5rem;
180
+ letter-spacing: var(--tracking-wide);
181
+ list-style: none;
182
+ margin: 0;
183
+ padding: 0;
184
+ text-transform: uppercase;
185
+ }
186
+
187
+ .ui-breadcrumb__item {
188
+ align-items: center;
189
+ color: var(--text-dim);
190
+ display: inline-flex;
191
+ gap: 0.5rem;
192
+ }
193
+
194
+ .ui-breadcrumb__item:not(:last-child)::after {
195
+ background: var(--line-strong);
196
+ border-radius: 50%;
197
+ content: '';
198
+ block-size: 0.22rem;
199
+ inline-size: 0.22rem;
200
+ }
201
+
202
+ .ui-breadcrumb__item[aria-current] {
203
+ color: var(--text);
204
+ }
205
+
206
+ .ui-breadcrumb__item a {
207
+ color: inherit;
208
+ }
209
+
210
+ @media (hover: hover) {
211
+ .ui-breadcrumb__item a:hover {
212
+ color: var(--accent);
213
+ }
214
+ }
215
+
216
+ /* --- Pagination --- */
217
+
218
+ .ui-pagination {
219
+ align-items: center;
220
+ display: flex;
221
+ flex-wrap: wrap;
222
+ gap: 0.3rem;
223
+ list-style: none;
224
+ margin: 0;
225
+ padding: 0;
226
+ }
227
+
228
+ .ui-pagination__item {
229
+ align-items: center;
230
+ background: transparent;
231
+ border: 1px solid var(--line);
232
+ border-radius: var(--radius-sm);
233
+ color: var(--text-soft);
234
+ cursor: pointer;
235
+ display: inline-flex;
236
+ font-family: var(--mono);
237
+ font-size: var(--text-xs);
238
+ justify-content: center;
239
+ min-block-size: 2rem;
240
+ min-inline-size: 2rem;
241
+ padding: 0 0.5rem;
242
+ transition:
243
+ border-color var(--duration-fast) var(--ease-standard),
244
+ color var(--duration-fast) var(--ease-standard);
245
+ }
246
+
247
+ .ui-pagination__item.is-active {
248
+ border-color: var(--accent);
249
+ color: var(--accent);
250
+ }
251
+
252
+ .ui-pagination__item[aria-disabled='true'] {
253
+ cursor: not-allowed;
254
+ opacity: 0.4;
255
+ }
256
+
257
+ @media (hover: hover) {
258
+ .ui-pagination__item:not(.is-active, [aria-disabled='true']):hover {
259
+ border-color: var(--line-strong);
260
+ color: var(--text);
261
+ }
262
+ }
263
+
264
+ /* --- Avatar — sharp, monospace initials or image --- */
265
+
266
+ .ui-avatar {
267
+ --av-size: 2.2rem;
268
+
269
+ align-items: center;
270
+ background: var(--panel-soft);
271
+ border: 1px solid var(--line-strong);
272
+ border-radius: var(--radius-sm);
273
+ color: var(--text);
274
+ display: inline-flex;
275
+ flex: 0 0 auto;
276
+ font-family: var(--mono);
277
+ font-size: calc(var(--av-size) * 0.38);
278
+ font-weight: 700;
279
+ block-size: var(--av-size);
280
+ justify-content: center;
281
+ letter-spacing: 0.04em;
282
+ overflow: hidden;
283
+ text-transform: uppercase;
284
+ inline-size: var(--av-size);
285
+ }
286
+
287
+ .ui-avatar img {
288
+ block-size: 100%;
289
+ object-fit: cover;
290
+ inline-size: 100%;
291
+ }
292
+
293
+ .ui-avatar--sm {
294
+ --av-size: 1.5rem;
295
+ }
296
+
297
+ .ui-avatar--lg {
298
+ --av-size: 3.2rem;
299
+ }
300
+
301
+ .ui-avatar-group {
302
+ display: inline-flex;
303
+ }
304
+
305
+ .ui-avatar-group .ui-avatar {
306
+ box-shadow: 0 0 0 2px var(--bg);
307
+ }
308
+
309
+ .ui-avatar-group .ui-avatar:not(:first-child) {
310
+ margin-inline-start: -0.5rem;
311
+ }
package/css/dots.css CHANGED
@@ -39,9 +39,9 @@
39
39
  background-position: 0 50%;
40
40
  background-size: 9px 9px;
41
41
  border: 0;
42
- height: 3px;
42
+ block-size: 3px;
43
43
  margin: var(--space-md) 0;
44
- width: 100%;
44
+ inline-size: 100%;
45
45
  }
46
46
 
47
47
  /* Status dot — the glyph-style state indicator. */
@@ -50,8 +50,8 @@
50
50
  border-radius: 50%;
51
51
  display: inline-block;
52
52
  flex: 0 0 auto;
53
- height: 0.55rem;
54
- width: 0.55rem;
53
+ block-size: 0.55rem;
54
+ inline-size: 0.55rem;
55
55
  }
56
56
 
57
57
  .ui-dot--accent {
@@ -108,8 +108,8 @@
108
108
  animation: pulseDot 1s var(--ease-standard) infinite;
109
109
  background: var(--accent);
110
110
  border-radius: 50%;
111
- height: 0.42rem;
112
- width: 0.42rem;
111
+ block-size: 0.42rem;
112
+ inline-size: 0.42rem;
113
113
  }
114
114
 
115
115
  .ui-dotloader span:nth-child(2) {
@@ -120,6 +120,83 @@
120
120
  animation-delay: 0.32s;
121
121
  }
122
122
 
123
+ /* Dot spinner — the Nothing-signature loader: a ring of dots, the lit
124
+ one stepping around the circle. Pure CSS: a steps() rotation of the
125
+ container plus a static opacity ramp on the dots reads as a comet.
126
+ Markup: <span class="ui-dotspinner"><i></i> ×8</span>. Size via
127
+ --ds-box / --ds-dot. */
128
+ .ui-dotspinner {
129
+ --ds-box: 1.6rem;
130
+ --ds-dot: 0.26rem;
131
+
132
+ animation: uiSpin 1s steps(8) infinite;
133
+ display: inline-block;
134
+ flex: 0 0 auto;
135
+ block-size: var(--ds-box);
136
+ position: relative;
137
+ inline-size: var(--ds-box);
138
+ }
139
+
140
+ .ui-dotspinner i {
141
+ background: var(--accent);
142
+ border-radius: 50%;
143
+ block-size: var(--ds-dot);
144
+ inset: 0;
145
+ margin: auto;
146
+ position: absolute;
147
+ inline-size: var(--ds-dot);
148
+ }
149
+
150
+ .ui-dotspinner i:nth-child(1) {
151
+ opacity: 1;
152
+ transform: rotate(0deg) translateY(calc(var(--ds-box) / -2 + var(--ds-dot) / 2));
153
+ }
154
+
155
+ .ui-dotspinner i:nth-child(2) {
156
+ opacity: 0.85;
157
+ transform: rotate(45deg) translateY(calc(var(--ds-box) / -2 + var(--ds-dot) / 2));
158
+ }
159
+
160
+ .ui-dotspinner i:nth-child(3) {
161
+ opacity: 0.7;
162
+ transform: rotate(90deg) translateY(calc(var(--ds-box) / -2 + var(--ds-dot) / 2));
163
+ }
164
+
165
+ .ui-dotspinner i:nth-child(4) {
166
+ opacity: 0.56;
167
+ transform: rotate(135deg) translateY(calc(var(--ds-box) / -2 + var(--ds-dot) / 2));
168
+ }
169
+
170
+ .ui-dotspinner i:nth-child(5) {
171
+ opacity: 0.44;
172
+ transform: rotate(180deg) translateY(calc(var(--ds-box) / -2 + var(--ds-dot) / 2));
173
+ }
174
+
175
+ .ui-dotspinner i:nth-child(6) {
176
+ opacity: 0.34;
177
+ transform: rotate(225deg) translateY(calc(var(--ds-box) / -2 + var(--ds-dot) / 2));
178
+ }
179
+
180
+ .ui-dotspinner i:nth-child(7) {
181
+ opacity: 0.25;
182
+ transform: rotate(270deg) translateY(calc(var(--ds-box) / -2 + var(--ds-dot) / 2));
183
+ }
184
+
185
+ .ui-dotspinner i:nth-child(8) {
186
+ opacity: 0.16;
187
+ transform: rotate(315deg) translateY(calc(var(--ds-box) / -2 + var(--ds-dot) / 2));
188
+ }
189
+
190
+ .ui-dotspinner--sm {
191
+ --ds-box: 1.05rem;
192
+ --ds-dot: 0.18rem;
193
+ }
194
+
195
+ .ui-dotspinner--lg {
196
+ --ds-box: 2.6rem;
197
+ --ds-dot: 0.42rem;
198
+ }
199
+
123
200
  /* Dot progress meter — segmented LED bar. */
124
201
  .ui-dotbar {
125
202
  display: flex;
@@ -130,13 +207,46 @@
130
207
  background: var(--field-dot);
131
208
  border-radius: 1px;
132
209
  flex: 1;
133
- height: 0.5rem;
210
+ block-size: 0.5rem;
134
211
  }
135
212
 
136
213
  .ui-dotbar i.is-on {
137
214
  background: var(--accent);
138
215
  }
139
216
 
217
+ /* Indeterminate: the lit cell sweeps left→right across the segments. */
218
+ .ui-dotbar--indeterminate i {
219
+ animation: pulseDot 1.1s var(--ease-standard) infinite;
220
+ }
221
+
222
+ .ui-dotbar--indeterminate i:nth-child(2) {
223
+ animation-delay: 0.09s;
224
+ }
225
+
226
+ .ui-dotbar--indeterminate i:nth-child(3) {
227
+ animation-delay: 0.18s;
228
+ }
229
+
230
+ .ui-dotbar--indeterminate i:nth-child(4) {
231
+ animation-delay: 0.27s;
232
+ }
233
+
234
+ .ui-dotbar--indeterminate i:nth-child(5) {
235
+ animation-delay: 0.36s;
236
+ }
237
+
238
+ .ui-dotbar--indeterminate i:nth-child(6) {
239
+ animation-delay: 0.45s;
240
+ }
241
+
242
+ .ui-dotbar--indeterminate i:nth-child(7) {
243
+ animation-delay: 0.54s;
244
+ }
245
+
246
+ .ui-dotbar--indeterminate i:nth-child(n + 8) {
247
+ animation-delay: 0.63s;
248
+ }
249
+
140
250
  /* Matrix-reveal wrapper — content wipes in left→right on .is-in. */
141
251
  .ui-matrix {
142
252
  clip-path: inset(0 100% 0 0);
@@ -149,10 +259,17 @@
149
259
 
150
260
  @media (prefers-reduced-motion: reduce) {
151
261
  .ui-dot--live::after,
152
- .ui-dotloader span {
262
+ .ui-dotloader span,
263
+ .ui-dotspinner,
264
+ .ui-dotbar--indeterminate i {
153
265
  animation: none;
154
266
  }
155
267
 
268
+ /* Keep the spinner legible while static. */
269
+ .ui-dotspinner i {
270
+ opacity: 0.6;
271
+ }
272
+
156
273
  .ui-matrix {
157
274
  clip-path: none;
158
275
  }
@@ -0,0 +1,243 @@
1
+ /* ==========================================================================
2
+ feedback — alert / toast / tooltip / progress
3
+ Status is carried by a single leading dot + a rationed tone colour,
4
+ never a fill. Nothing-flat, hairline, sharp.
5
+ ========================================================================== */
6
+
7
+ /* --- Alert / callout — inline, dismissible-compatible --- */
8
+
9
+ .ui-alert {
10
+ background: var(--panel-soft);
11
+ border: 1px solid var(--line);
12
+ border-inline-start: 2px solid var(--line-strong);
13
+ border-radius: var(--radius-md);
14
+ color: var(--text-soft);
15
+ display: grid;
16
+ font-size: var(--text-sm);
17
+ gap: 0.3rem;
18
+ grid-template-columns: auto 1fr;
19
+ padding: 0.8rem 0.9rem;
20
+ }
21
+
22
+ /* Leading status glyph — the Nothing state cue. */
23
+ .ui-alert::before {
24
+ background: var(--text-dim);
25
+ border-radius: 50%;
26
+ content: '';
27
+ block-size: 0.5rem;
28
+ margin-block-start: 0.32rem;
29
+ inline-size: 0.5rem;
30
+ }
31
+
32
+ .ui-alert > * {
33
+ grid-column: 2;
34
+ }
35
+
36
+ .ui-alert__title {
37
+ color: var(--text);
38
+ font-family: var(--mono);
39
+ font-size: var(--text-2xs);
40
+ font-weight: 700;
41
+ letter-spacing: var(--tracking-wide);
42
+ margin: 0;
43
+ text-transform: uppercase;
44
+ }
45
+
46
+ .ui-alert__body {
47
+ margin: 0;
48
+ }
49
+
50
+ .ui-alert__dismiss {
51
+ background: transparent;
52
+ border: 0;
53
+ color: var(--text-dim);
54
+ cursor: pointer;
55
+ font-family: var(--mono);
56
+ grid-column: 3;
57
+ grid-row: 1;
58
+ line-height: 1;
59
+ padding: 0.1rem 0.3rem;
60
+ }
61
+
62
+ .ui-alert:has(.ui-alert__dismiss) {
63
+ grid-template-columns: auto 1fr auto;
64
+ }
65
+
66
+ .ui-alert--accent {
67
+ border-inline-start-color: var(--accent);
68
+ }
69
+
70
+ .ui-alert--accent::before {
71
+ background: var(--accent);
72
+ }
73
+
74
+ .ui-alert--success {
75
+ border-inline-start-color: var(--success);
76
+ }
77
+
78
+ .ui-alert--success::before {
79
+ background: var(--success);
80
+ }
81
+
82
+ .ui-alert--warning {
83
+ border-inline-start-color: var(--warning);
84
+ }
85
+
86
+ .ui-alert--warning::before {
87
+ background: var(--warning);
88
+ }
89
+
90
+ .ui-alert--danger {
91
+ border-inline-start-color: var(--danger);
92
+ }
93
+
94
+ .ui-alert--danger::before {
95
+ background: var(--danger);
96
+ }
97
+
98
+ @media (hover: hover) {
99
+ .ui-alert__dismiss:hover {
100
+ color: var(--text);
101
+ }
102
+ }
103
+
104
+ /* --- Toast — transient, stacked, screen-anchored --- */
105
+
106
+ .ui-toast-stack {
107
+ display: grid;
108
+ gap: 0.5rem;
109
+
110
+ /* Logical so the stack anchors bottom inline-end and mirrors in RTL. */
111
+ inset-block: auto 1.25rem;
112
+ inset-inline: auto 1.25rem;
113
+ justify-items: end;
114
+ max-inline-size: min(22rem, calc(100vw - 2rem));
115
+ pointer-events: none;
116
+ position: fixed;
117
+ z-index: 60;
118
+ }
119
+
120
+ .ui-toast {
121
+ align-items: flex-start;
122
+ animation: uiToastIn var(--duration-base) var(--ease-spring) both;
123
+ background: var(--panel-strong);
124
+ border: 1px solid var(--line-strong);
125
+ border-radius: var(--radius-md);
126
+ box-shadow: var(--shadow-raised);
127
+ color: var(--text-soft);
128
+ display: grid;
129
+ font-size: var(--text-sm);
130
+ gap: 0.2rem 0.55rem;
131
+ grid-template-columns: auto 1fr;
132
+ padding: 0.7rem 0.85rem;
133
+ pointer-events: auto;
134
+ inline-size: 100%;
135
+ }
136
+
137
+ .ui-toast::before {
138
+ background: var(--text-dim);
139
+ border-radius: 50%;
140
+ content: '';
141
+ grid-row: 1 / -1;
142
+ block-size: 0.5rem;
143
+ margin-block-start: 0.3rem;
144
+ inline-size: 0.5rem;
145
+ }
146
+
147
+ .ui-toast__title {
148
+ color: var(--text);
149
+ font-family: var(--mono);
150
+ font-size: var(--text-2xs);
151
+ font-weight: 700;
152
+ letter-spacing: var(--tracking-wide);
153
+ margin: 0;
154
+ text-transform: uppercase;
155
+ }
156
+
157
+ .ui-toast--accent::before {
158
+ background: var(--accent);
159
+ }
160
+
161
+ .ui-toast--success::before {
162
+ background: var(--success);
163
+ }
164
+
165
+ .ui-toast--warning::before {
166
+ background: var(--warning);
167
+ }
168
+
169
+ .ui-toast--danger::before {
170
+ background: var(--danger);
171
+ }
172
+
173
+ /* --- Tooltip — CSS-only, hover/focus, no JS --- */
174
+
175
+ .ui-tooltip {
176
+ display: inline-flex;
177
+ position: relative;
178
+ }
179
+
180
+ .ui-tooltip__bubble {
181
+ background: var(--text);
182
+ border-radius: var(--radius-sm);
183
+ inset-block-end: calc(100% + 0.5rem);
184
+ color: var(--bg);
185
+ font-family: var(--mono);
186
+ font-size: var(--text-2xs);
187
+ inset-inline-start: 50%;
188
+ letter-spacing: var(--tracking-wide);
189
+ opacity: 0;
190
+ padding: 0.34rem 0.5rem;
191
+ pointer-events: none;
192
+ position: absolute;
193
+ text-transform: uppercase;
194
+ transform: translate(-50%, 4px);
195
+ transition:
196
+ opacity var(--duration-fast) var(--ease-standard),
197
+ transform var(--duration-fast) var(--ease-standard);
198
+ white-space: nowrap;
199
+ z-index: 50;
200
+ }
201
+
202
+ .ui-tooltip:hover .ui-tooltip__bubble,
203
+ .ui-tooltip:focus-within .ui-tooltip__bubble {
204
+ opacity: 1;
205
+ transform: translate(-50%, 0);
206
+ }
207
+
208
+ /* --- Progress — linear, determinate or indeterminate --- */
209
+
210
+ .ui-progress {
211
+ background: var(--panel-soft);
212
+ border: 1px solid var(--line);
213
+ border-radius: var(--radius-pill);
214
+ block-size: 0.5rem;
215
+ overflow: hidden;
216
+ position: relative;
217
+ inline-size: 100%;
218
+ }
219
+
220
+ .ui-progress__bar {
221
+ background: var(--accent);
222
+ block-size: 100%;
223
+ transition: inline-size var(--duration-base) var(--ease-out);
224
+ inline-size: calc(clamp(0, var(--value, 0), 100) * 1%);
225
+ }
226
+
227
+ .ui-progress--indeterminate .ui-progress__bar {
228
+ animation: uiTrack 1.1s var(--ease-standard) infinite;
229
+ position: absolute;
230
+ inline-size: 45%;
231
+ }
232
+
233
+ @media (prefers-reduced-motion: reduce) {
234
+ .ui-progress--indeterminate .ui-progress__bar {
235
+ animation-duration: 0.01ms;
236
+ inset-inline-start: 0;
237
+ inline-size: 100%;
238
+ }
239
+
240
+ .ui-toast {
241
+ animation: none;
242
+ }
243
+ }